yusm 6 månader sedan
förälder
incheckning
af1bef91e4

+ 12 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectApprovalController.java

@@ -115,12 +115,16 @@ public class ProjectApprovalController {
             projectApproval.setInchargerName(id.getName());
         }
         if (projectApproval.getId() != null) {
-            //编辑
-            Integer count=projectMapper.selectCount(new LambdaQueryWrapper<Project>().eq(Project::getCompanyId, companyId).eq(Project::getProjectCode, projectApproval.getProjectCode()));
-            Integer count1=projectApprovalService.count(new LambdaQueryWrapper<ProjectApproval>().eq(ProjectApproval::getCompanyId, companyId).eq(ProjectApproval::getProjectCode, projectApproval.getProjectCode()).ne(ProjectApproval::getId,projectApproval.getId()));
-            if(count>0||count1>0){
-                msg.setError("已存在项目编号为["+projectApproval.getProjectCode()+"]的项目/立项");
-                return msg;
+            if (org.apache.commons.lang3.StringUtils.isNotEmpty(projectApproval.getProjectCode())){
+                //编辑
+                Integer count=projectMapper.selectCount(new LambdaQueryWrapper<Project>().eq(Project::getCompanyId, companyId)
+                        .eq( Project::getProjectCode, projectApproval.getProjectCode())
+                        .ne(Project::getApproveId,projectApproval.getId()));
+                Integer count1=projectApprovalService.count(new LambdaQueryWrapper<ProjectApproval>().eq(ProjectApproval::getCompanyId, companyId).eq(ProjectApproval::getProjectCode, projectApproval.getProjectCode()).ne(ProjectApproval::getId,projectApproval.getId()));
+                if(count>0||count1>0){
+                    msg.setError("已存在项目编号为["+projectApproval.getProjectCode()+"]的项目/立项");
+                    return msg;
+                }
             }
         } else {
             //新增
@@ -319,8 +323,8 @@ public class ProjectApprovalController {
 
     @RequestMapping("/check")
     @Transactional(rollbackFor = Exception.class)
-    public HttpRespMsg check(Integer id,Integer checkType,Integer revokeType){
-        return projectApprovalService.check(id,checkType,revokeType);
+    public HttpRespMsg check(Integer id,Integer checkType,Integer revokeType,String rejectInfo){
+        return projectApprovalService.check(id,checkType,revokeType,rejectInfo);
     }
 
     @RequestMapping("/importData")

+ 12 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectApproval.java

@@ -247,6 +247,12 @@ public class ProjectApproval extends Model<ProjectApproval> {
     @TableField("wx_corp_sp_no")
     private String wxCorpSpNo;
 
+    /**
+     * 驳回原因
+     */
+    @TableField("reject_info")
+    private String rejectInfo;
+
     @TableField(exist = false)
     private List<ProjectApprovalBasecost> projectApprovalBasecostList;
 
@@ -265,6 +271,12 @@ public class ProjectApproval extends Model<ProjectApproval> {
     @TableField(exist = false)
     private Integer canChecked;
 
+    @TableField(exist = false)
+    private Boolean isFirstCheckUser;
+
+    @TableField(exist = false)
+    private Boolean isCheckedUser;
+
 
     @Override
     protected Serializable pkVal() {

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectApprovalService.java

@@ -24,5 +24,5 @@ public interface ProjectApprovalService extends IService<ProjectApproval> {
 
     HttpRespMsg exportData(String keyword, Integer searchField, String statuses, Integer category, Integer viewId);
 
-    HttpRespMsg check(Integer id, Integer checkType, Integer revokeType);
+    HttpRespMsg check(Integer id, Integer checkType, Integer revokeType,String rejectInfo);
 }

+ 37 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectApprovalServiceImpl.java

@@ -161,6 +161,25 @@ public class ProjectApprovalServiceImpl extends ServiceImpl<ProjectApprovalMappe
             if(optional.isPresent()){
                 r.setInchargerName(optional.get().getName());
             }
+            Optional<ProjectApprovalCheck> first1 = approvalCheckList.stream().filter(p -> p.getProjectApprovalId().equals(r.getId()) && p.getStatus() == 0).min(Comparator.comparing(ProjectApprovalCheck::getSeq));
+            Optional<ProjectApprovalCheck> first2 = approvalCheckList.stream().filter(p -> p.getProjectApprovalId().equals(r.getId()) && p.getStatus() == 1&&p.getUserId().equals(user.getId())).findFirst();
+            if (first1.isPresent()){
+                ProjectApprovalCheck projectApprovalCheck = first1.get();
+                if (projectApprovalCheck.getUserId().equals(user.getId())){
+                    r.setIsFirstCheckUser(true);
+                }else {
+                    r.setIsFirstCheckUser(false);
+                }
+            }else r.setIsFirstCheckUser(false);
+
+            if (first2.isPresent()){
+                ProjectApprovalCheck projectApprovalCheck = first2.get();
+                if (projectApprovalCheck.getUserId().equals(user.getId())){
+                    r.setIsCheckedUser(true);
+                }else {
+                    r.setIsFirstCheckUser(false);
+                }
+            }else r.setIsCheckedUser(false);
 //            List<ProjectApprovalCheck> checkList = approvalCheckList.stream().filter(a -> a.getProjectApprovalId().equals(r.getId())).collect(Collectors.toList());
 //            Optional<ProjectApprovalCheck> first = checkList.stream().filter(c -> c.getUserId().equals(user.getId())&&c.getStatus()==0).findFirst();
         });
@@ -788,20 +807,22 @@ public class ProjectApprovalServiceImpl extends ServiceImpl<ProjectApprovalMappe
     }
 
     @Override
-    public HttpRespMsg check(Integer id, Integer checkType, Integer revokeType) {
+    public HttpRespMsg check(Integer id, Integer checkType, Integer revokeType,String rejectInfo) {
         HttpRespMsg msg=new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
         ProjectApproval projectApproval = getById(id);
-        List<ProjectApprovalCheck> projectApprovalChecks = projectApprovalCheckService.list(new LambdaQueryWrapper<ProjectApprovalCheck>().eq(ProjectApprovalCheck::getProjectApprovalId, id));
-        Optional<ProjectApprovalCheck> first = projectApprovalChecks.stream().filter(p -> p.getUserId().equals(user.getId())&&p.getStatus()==0).findFirst();
+        List<ProjectApprovalCheck> projectApprovalChecks = projectApprovalCheckService.list(new LambdaQueryWrapper<ProjectApprovalCheck>().eq(ProjectApprovalCheck::getProjectApprovalId, id).orderByAsc(ProjectApprovalCheck::getSeq));
+        if (null==projectApprovalChecks||projectApprovalChecks.isEmpty()){
+            msg.setError("该项目未设置审核人");
+            return msg;
+        }
+        Optional<ProjectApprovalCheck> first = projectApprovalChecks.stream().filter(p ->  p.getStatus() == 0&& p.getUserId().equals(user.getId())).min(Comparator.comparing(ProjectApprovalCheck::getSeq));
 //        boolean hasAllPriviledge = sysFunctionService.hasPriviledge(user.getRoleId(), "管理全部立项申请");
 //        boolean hasCheckPriviledge = sysFunctionService.hasPriviledge(user.getRoleId(), "审核立项申请");
         if(checkType!=3){
-            if(projectApprovalChecks.size()>0){
-                if(!first.isPresent()){
-                    msg.setError("审核人验证失败,请按照审核人顺序审核");
-                    return msg;
-                }
+            if(!first.isPresent()){
+                msg.setError("审核人验证失败,请按照审核人顺序审核");
+                return msg;
             }
         }
         ProjectApprovalLog projectApprovalLog=new ProjectApprovalLog();
@@ -861,11 +882,19 @@ public class ProjectApprovalServiceImpl extends ServiceImpl<ProjectApprovalMappe
                     //通过
                     projectApprovalLog.setType(2);
                     projectApprovalLogService.save(projectApprovalLog);
+                    if (first.get().getSeq()==projectApprovalChecks.size()){
+                        projectApproval.setStatus(1);
+                        projectApprovalService.updateById(projectApproval);
+                    }
                 }
                 break;
             /*驳回*/
             case 2:
+                ProjectApprovalCheck check = first.get();
+                check.setStatus(2);
+                projectApprovalCheckService.updateById(check);
                 projectApproval.setStatus(2);
+                projectApproval.setRejectInfo(rejectInfo);
                 projectApprovalService.updateById(projectApproval);
                 //新增操作记录数据
                 projectApprovalLog.setCreateTime(LocalDateTime.now());

+ 76 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/projectApproval/projectApproval.vue

@@ -29,6 +29,15 @@
                 </el-form-item>
             </el-form>
         </el-col>
+        <el-dialog :title="$t('defaultText.pleaseEnterTheReason')"  v-if="denyReasonDialog" :visible.sync="denyReasonDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
+            <div>
+                <span style="color:red;">*</span><el-input type="textarea" v-model="denyReasonRReason" rows="2" placeholder="请输入驳回原因" />
+            </div>
+            <div slot="footer" class="dialog-footer">
+                <el-button  @click="denyReasonDialog = false" >{{ $t('btn.cancel') }}</el-button>
+                <el-button type="primary" @click="deny()" :disabled="!denyReasonRReason">{{ $t('btn.determine') }}</el-button>
+            </div>
+        </el-dialog>
         <div style="display: flex;width: 100%;">
                 <div class="classification">
                     <div>
@@ -81,8 +90,8 @@
                         <el-table-column :label="$t('operation')" :width="300" align="left" fixed="right">
                             <template slot-scope="scope">
                                 <el-button size="mini" type="primary" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck)&&scope.row.status!=1" @click="handleAdd(scope.$index, scope.row)">{{'编辑'}}</el-button>
-                                <el-button size="mini" type="success" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck) && scope.row.status==0"  @click="check(scope.row,1)" >{{'通过'}}</el-button>
-                                <el-button size="mini" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck) && scope.row.status==0" @click="check(scope.row,2)">{{'驳回'}}</el-button>
+                                <el-button size="mini" type="success" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck) && scope.row.status==0" :disabled="!scope.row.isFirstCheckUser"  @click="check(scope.row,1)" >{{'通过'}}</el-button>
+                                <el-button size="mini" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck) && scope.row.status==0" :disabled="!scope.row.isFirstCheckUser"  @click="showDenyDialog(scope.row,2)">{{'驳回'}}</el-button>
                                 <el-button size="mini" v-if="(permissions.projectApprovalEdit ||permissions.projectApprovalCheck) && scope.row.status==1" @click="check(scope.row,3)">{{'撤销'}}</el-button>
                             </template>
                         </el-table-column>
@@ -227,9 +236,11 @@
                                 </div>
                                 <el-divider></el-divider>
                                 <template>
-                                    <div><span>{{'审核人'}}</span></div>
-                                    <div>
-                                        <div v-for="(item, index) in pointList" :key="index" >
+                                    <div style="padding: 7px 0; ">
+                                        <span style="color: #409EFF; font-size: 17px;">{{'审核人'}}</span>
+                                    </div>
+                                    <!-- <div >
+                                        <div  v-for="(item, index) in pointList" :key="index" >
                                         第{{index+1}}审核人:
                                         <el-select  v-if="user.userNameNeedTranslate != 1" :disabled="item.status!=0" v-model="item.userId" style="width:140px;" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="manageSelect" size="small" filterable popper-class="managePopperClass">
                                             <el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id">
@@ -241,6 +252,20 @@
                                         <i class="el-icon-remove-outline" v-if="pointList.length>1 && item.status==0"  @click="deleteInput(index)"></i>
                                         <span>{{item.status==0?'待审核':item.status==1?"已审核":"已驳回"}}</span>
                                         </div>
+                                    </div> -->
+                                    <div>
+                                        <div v-for="(item, index) in pointList" :key="index" style="margin-bottom: 10px; padding: 10px; border: 1px solid #e0e0e0; border-radius: 5px;">
+                                            第{{index + 1}}审核人:
+                                            <el-select v-if="user.userNameNeedTranslate != 1" :disabled="item.status != 0" v-model="item.userId" style="width: 140px; margin-left: 10px;" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="manageSelect" size="small" filterable popper-class="managePopperClass">
+                                                <el-option v-for="participatorItem in participator" :key="participatorItem.id" :label="participatorItem.name" :value="participatorItem.id">
+                                                    <span style="float: left">{{ participatorItem.name }}</span>
+                                                </el-option>
+                                            </el-select>
+                                            <selectCat v-if="user.userNameNeedTranslate == 1" :size="'medium'" :subject="participator" :subjectId="item.userId" :distinction="'12'" @selectCal="selectCal" :disabled="canOnlyModParticipator || projectManagerEdit || isShowProjectName"></selectCat>
+                                            <i class="el-icon-circle-plus-outline" @click="addInput(index)" v-if="index == pointList.length - 1" style="margin-left: 10px;"></i>
+                                            <i class="el-icon-remove-outline" v-if="pointList.length > 1 && item.status == 0" @click="deleteInput(index)" style="margin-left: 10px;"></i>
+                                            <span style="margin-left: 10px;">{{ item.status == 0 ? '待审核' : item.status == 1 ? "已审核" : "已驳回" }}</span>
+                                        </div>
                                     </div>
                                 </template>
                             </el-form>  
@@ -400,6 +425,9 @@ components: {
 props: { },
 data() { 
 return {
+    denyReasonDialog:false,
+    denyReasonValue: {},
+    denyReasonRReason: '',
     keyword:"",
     searchField:"1",
     user: JSON.parse(sessionStorage.getItem("user")),
@@ -486,6 +514,49 @@ mounted () {
     this.getUsers();
 },
 methods: {
+    deny() {
+        // console.log(this.denyReasonValue);
+        // console.log(this.denyReasonRReason);
+
+        this.listLoading = true;
+        this.http.post('/project-approval/check',{ 
+            id:this.denyReasonValue.item.id ,
+            checkType:this.denyReasonValue.num,
+            revokeType:'',
+            rejectInfo:this.denyReasonRReason
+        },
+        res => {
+            this.listLoading = false;
+            if (res.code == "ok") {
+                this.$message({
+                    message: this.$t('operationissuccessful'),
+                    type: "success"
+                });
+                this.addFormVisible=false
+                this.denyReasonDialog=false
+                this.getList();
+            } else {
+                this.$message({
+                    message: res.msg,
+                    type: "error"
+                });
+            }
+        },
+        error => {
+            this.listLoading = false;
+            this.$message({
+                message: error,
+                type: "error"
+            });
+            }
+        );
+        
+    },
+    showDenyDialog(item, num) {
+                this.denyReasonDialog = true;
+                this.denyReasonValue = {item,num}
+        
+            },
     isSelectable(row,index){
         if(row.creatorId == this.user.id || row.inchargerId == this.user.id || this.permissions.projectApprovalEdit){
             return true