فهرست منبع

评星定级修改

licailing 5 سال پیش
والد
کامیت
f90e23c32d

+ 36 - 0
src/main/java/com/izouma/wenlvju/domain/Collaborate.java

@@ -0,0 +1,36 @@
+package com.izouma.wenlvju.domain;
+
+import com.izouma.wenlvju.converter.LongArrayConverter;
+import com.izouma.wenlvju.converter.StringArrayConverter;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Where;
+
+import javax.persistence.Column;
+import javax.persistence.Convert;
+import javax.persistence.Entity;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Entity
+@Where(clause = "del = 0")
+@ApiModel(value = "承办单位合作")
+public class Collaborate extends BaseEntity {
+    private Long rateId;
+
+    private Long gradingOrganizationId;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = StringArrayConverter.class)
+    private List<String> consent;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = LongArrayConverter.class)
+    private List<Long> artTypeId;
+}

+ 36 - 30
src/main/java/com/izouma/wenlvju/domain/RateExpertAudit.java

@@ -20,40 +20,46 @@ import java.util.List;
 @Entity
 @Where(clause = "del = false")
 public class RateExpertAudit extends BaseEntity {
-    private Long userId;
+//    private Long userId;
 
     private Long rateId;
 
-    @ApiModelProperty(value = "考级组织")
-    private int examOrganization;
-    @ApiModelProperty(value = "考点设置")
-    private int examSite;
-    @ApiModelProperty(value = "考场设置")
-    private int examRoom;
-    @ApiModelProperty(value = "环境要求")
-    private int environment;
-    @ApiModelProperty(value = "安全保障")
-    private int safety;
-    @ApiModelProperty(value = "宣传报备")
-    private int promote;
-    @ApiModelProperty(value = "考级报名")
-    private int signUp;
-    @ApiModelProperty(value = "考试准备")
-    private int examPreparation;
-    @ApiModelProperty(value = "考场服务")
-    private int examService;
-    @ApiModelProperty(value = "考务考官")
-    private int examiner;
-    @ApiModelProperty(value = "考级规范")
-    private int specification;
-    @ApiModelProperty(value = "视频器材")
-    private int video;
-    @ApiModelProperty(value = "考试成绩")
+    private String type;
+
+    private int expertScore;
+
     private int score;
-    @ApiModelProperty(value = "艺术培训")
-    private int artTrain;
-    @ApiModelProperty(value = "艺术成果")
-    private int artResult;
+
+//    @ApiModelProperty(value = "考级组织")
+//    private int examOrganization;
+//    @ApiModelProperty(value = "考点设置")
+//    private int examSite;
+//    @ApiModelProperty(value = "考场设置")
+//    private int examRoom;
+//    @ApiModelProperty(value = "环境要求")
+//    private int environment;
+//    @ApiModelProperty(value = "安全保障")
+//    private int safety;
+//    @ApiModelProperty(value = "宣传报备")
+//    private int promote;
+//    @ApiModelProperty(value = "考级报名")
+//    private int signUp;
+//    @ApiModelProperty(value = "考试准备")
+//    private int examPreparation;
+//    @ApiModelProperty(value = "考场服务")
+//    private int examService;
+//    @ApiModelProperty(value = "考务考官")
+//    private int examiner;
+//    @ApiModelProperty(value = "考级规范")
+//    private int specification;
+//    @ApiModelProperty(value = "视频器材")
+//    private int video;
+//    @ApiModelProperty(value = "考试成绩")
+//    private int score;
+//    @ApiModelProperty(value = "艺术培训")
+//    private int artTrain;
+//    @ApiModelProperty(value = "艺术成果")
+//    private int artResult;
 
     @Column(columnDefinition = "TEXT")
     @Convert(converter = StringArrayConverter.class)

+ 4 - 0
src/main/java/com/izouma/wenlvju/enums/RateStatus.java

@@ -1,6 +1,10 @@
 package com.izouma.wenlvju.enums;
 
 public enum RateStatus {
+    /*
+    草稿
+     */
+    DRAFT,
     /*
     等待初审
      */

+ 4 - 1
src/main/java/com/izouma/wenlvju/repo/RateExpertAuditRepo.java

@@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 public interface RateExpertAuditRepo extends JpaRepository<RateExpertAudit, Long>, JpaSpecificationExecutor<RateExpertAudit> {
     @Query("update RateExpertAudit t set t.del = true where t.id = ?1")
@@ -14,5 +15,7 @@ public interface RateExpertAuditRepo extends JpaRepository<RateExpertAudit, Long
     @Transactional
     void softDelete(Long id);
 
-    RateExpertAudit findByRateId(Long rateId);
+    List<RateExpertAudit> findAllByRateId(Long rateId);
+
+    RateExpertAudit findByRateIdAndType(Long rateId, String type);
 }

+ 1 - 0
src/main/java/com/izouma/wenlvju/security/WebSecurityConfig.java

@@ -63,6 +63,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/v2/api-docs", "/swagger-ui.html", "/swagger-resources/**", "/webjars/**").permitAll()
                 .antMatchers("/user/register").permitAll()
                 .antMatchers("/user/regOrganization").permitAll()
+                .antMatchers("/gradingOrganization/all").permitAll()
                 .antMatchers("/district").permitAll()
                 .antMatchers("/district/NJ").permitAll()
                 .antMatchers("/upload/**").permitAll()

+ 25 - 0
src/main/java/com/izouma/wenlvju/service/RateExpertAuditService.java

@@ -1,13 +1,18 @@
 package com.izouma.wenlvju.service;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.izouma.wenlvju.domain.RateExpertAudit;
 import com.izouma.wenlvju.dto.PageQuery;
+import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.RateExpertAuditRepo;
 import com.izouma.wenlvju.utils.JpaUtils;
+import com.izouma.wenlvju.utils.ObjUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 @AllArgsConstructor
 public class RateExpertAuditService {
@@ -17,4 +22,24 @@ public class RateExpertAuditService {
     public Page<RateExpertAudit> all(PageQuery pageQuery) {
         return rateExpertAuditRepo.findAll(JpaUtils.toSpecification(pageQuery, RateExpertAudit.class), JpaUtils.toPageRequest(pageQuery));
     }
+
+    public void batchSave(List<RateExpertAudit> audits) {
+        audits.forEach(record -> {
+            if (record.getId() != null) {
+                RateExpertAudit orig = rateExpertAuditRepo.findById(record.getId())
+                        .orElseThrow(new BusinessException("无记录"));
+                ObjUtils.merge(orig, record);
+                rateExpertAuditRepo.save(orig);
+            } else {
+                RateExpertAudit orig = rateExpertAuditRepo.findByRateIdAndType(record.getRateId(), record.getType());
+                if (ObjectUtil.isNotNull(orig)) {
+                    ObjUtils.merge(orig, record);
+                    rateExpertAuditRepo.save(orig);
+                } else {
+                    rateExpertAuditRepo.save(record);
+                }
+
+            }
+        });
+    }
 }

+ 11 - 4
src/main/java/com/izouma/wenlvju/web/RateExpertAuditController.java

@@ -1,13 +1,14 @@
 package com.izouma.wenlvju.web;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.izouma.wenlvju.domain.RateExpertAudit;
 import com.izouma.wenlvju.service.RateExpertAuditService;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.RateExpertAuditRepo;
 import com.izouma.wenlvju.utils.ObjUtils;
-import com.izouma.wenlvju.utils.SecurityUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
@@ -34,14 +35,20 @@ public class RateExpertAuditController extends BaseController {
             ObjUtils.merge(orig, record);
             return rateExpertAuditRepo.save(orig);
         }
-        RateExpertAudit byRateId = rateExpertAuditRepo.findByRateId(record.getRateId());
-        if (ObjectUtil.isNotNull(byRateId)){
+        List<RateExpertAudit> byRateId = rateExpertAuditRepo.findAllByRateId(record.getRateId());
+        if (CollUtil.isNotEmpty(byRateId)) {
             throw new BusinessException("已评分");
         }
-        record.setUserId(SecurityUtils.getAuthenticatedUser().getId());
+//        record.setUserId(SecurityUtils.getAuthenticatedUser().getId());
         return rateExpertAuditRepo.save(record);
     }
 
+    @PostMapping("/batchSave")
+    public void batchSave(String audits) {
+        List<RateExpertAudit> rateExpertAudits = JSONObject.parseArray(audits, RateExpertAudit.class);
+        rateExpertAuditService.batchSave(rateExpertAudits);
+    }
+
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")

+ 2 - 2
src/main/vue/src/components/FileUpload.vue

@@ -26,7 +26,7 @@
                         @click="preview(file)"
                     ></i>
                     <i class="opt-icon el-icon-download" v-if="file.status === 'success'" @click="download(file)"></i>
-                    <i class="opt-icon el-icon-delete" @click="removeFile(file)"></i>
+                    <i class="opt-icon el-icon-delete" @click="removeFile(file)" v-if="!readonly"></i>
                 </i>
             </div>
             <el-progress
@@ -63,7 +63,7 @@ export default {
         limit: {
             type: Number,
             default() {
-                return 10000;
+                return 50000;
             }
         },
         value: {},

+ 2 - 2
src/main/vue/src/mixins/rateStatus.js

@@ -2,11 +2,11 @@ export default {
     data() {
         return {
             statusOptions: [
-                { label: '草稿', value: '' },
+                { label: '草稿', value: 'DRAFT' },
                 { label: '等待初审', value: 'FIRST_REVIEW_PENDING' },
+                { label: '初审驳回', value: 'FIRST_REVIEW_DENY' },
                 { label: '已上报', value: 'ASSIGN_EXPERT' },
                 { label: '待专家组考察', value: 'REVIEW_PENDING' },
-                { label: '初审驳回', value: 'FIRST_REVIEW_DENY' },
                 { label: '最终评审', value: 'SUBMIT_GRADE' },
                 { label: '待提交纸质材料', value: 'SUBMIT_PAPER_MATERIALS' },
                 { label: '完成', value: 'COMPLETE' }

+ 43 - 12
src/main/vue/src/views/Login.vue

@@ -13,21 +13,31 @@
                         label="用户名"
                         :rules="{ required: true, message: '请输入用户名', trigger: 'blur' }"
                     >
-                        <el-input v-model="registerInfo.username" placeholder="用户名"> </el-input>
+                        <el-input class="input-width" v-model="registerInfo.username" placeholder="用户名"> </el-input>
                     </el-form-item>
                     <el-form-item
                         prop="password"
                         label="密码"
                         :rules="{ required: true, message: '请输入密码', trigger: 'blur' }"
                     >
-                        <el-input v-model="registerInfo.password" placeholder="密码" type="password"></el-input>
+                        <el-input
+                            class="input-width"
+                            v-model="registerInfo.password"
+                            placeholder="密码"
+                            type="password"
+                        ></el-input>
                     </el-form-item>
                     <el-form-item
                         prop="password"
                         label="确认密码"
                         :rules="{ required: true, message: '请输入密码', trigger: 'blur' }"
                     >
-                        <el-input v-model="registerInfo.password" placeholder="密码" type="password"></el-input>
+                        <el-input
+                            class="input-width"
+                            v-model="registerInfo.password"
+                            placeholder="密码"
+                            type="password"
+                        ></el-input>
                     </el-form-item>
 
                     <el-form-item
@@ -35,7 +45,12 @@
                         label="承办单位名称"
                         :rules="{ required: true, message: '请输入承办单位名称', trigger: 'blur' }"
                     >
-                        <el-input v-model="registerInfo.organizationName" placeholder="承办单位名称"> </el-input>
+                        <el-input
+                            class="input-width"
+                            v-model="registerInfo.organizationName"
+                            placeholder="承办单位名称"
+                        >
+                        </el-input>
                     </el-form-item>
                     <el-form-item
                         prop="phone"
@@ -47,7 +62,7 @@
                             trigger: 'blur'
                         }"
                     >
-                        <el-input v-model="registerInfo.phone" placeholder="手机号"> </el-input>
+                        <el-input class="input-width" v-model="registerInfo.phone" placeholder="手机号"> </el-input>
                     </el-form-item>
                     <el-form-item
                         prop="email"
@@ -59,23 +74,23 @@
                             trigger: 'blur'
                         }"
                     >
-                        <el-input v-model="registerInfo.email" placeholder="电子邮箱"> </el-input>
+                        <el-input class="input-width" v-model="registerInfo.email" placeholder="电子邮箱"> </el-input>
                     </el-form-item>
                     <el-form-item
                         prop="examinationAgency"
-                        label="发证机构"
-                        :rules="{ required: true, message: '请选择发证机构', trigger: 'blur' }"
+                        label="所属考级机构"
+                        :rules="{ required: true, message: '请选择所属考级机构', trigger: 'blur' }"
                     >
                         <el-select
                             v-model="registerInfo.examinationAgency"
-                            placeholder="请选择发证机构"
+                            placeholder="请选择所属考级机构"
                             style="width: 350px"
                         >
                             <el-option
                                 v-for="(item, index) in examination"
                                 :key="index"
-                                :value="item"
-                                :label="item"
+                                :value="item.value"
+                                :label="item.label"
                             ></el-option>
                         </el-select>
                         <!-- <el-input v-model="registerInfo.organizationName" placeholder="发证机构"> </el-input> -->
@@ -215,7 +230,7 @@ export default {
             time: 0,
             sending: false,
             districtOptions: [],
-            examination: ['中国音乐学院', '中国艺术科技研究所', '北京舞蹈学院']
+            examination: []
         };
     },
     created() {
@@ -235,6 +250,22 @@ export default {
                 console.log(e);
                 this.$message.error(e.error);
             });
+        this.$http
+            .post('/gradingOrganization/all', { size: 1000 }, { body: 'json' })
+            .then(res => {
+                if (res.content.length > 0) {
+                    res.content.forEach(item => {
+                        this.examination.push({
+                            label: item.name,
+                            value: item.id
+                        });
+                    });
+                }
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
     },
     methods: {
         login() {

+ 4 - 4
src/main/vue/src/views/organization/OrganizationInfo.vue

@@ -7,7 +7,7 @@
             label-width="50px"
             label-position="right"
             size="small"
-            style="max-width: 620px;"
+            style="max-width: 640px;"
         >
             <div class="info-content">
                 <div class="info-item">
@@ -17,9 +17,9 @@
                     </div>
                 </div>
                 <div class="info-item">
-                    <div class="name">发证机构</div>
+                    <div class="name">所属考级机构</div>
                     <div class="val">
-                        <el-select v-model="examinationAgency" placeholder="请选择发证机构">
+                        <el-select v-model="examinationAgency" placeholder="所属考级机构">
                             <el-option
                                 v-for="(item, index) in examination"
                                 :key="index"
@@ -273,7 +273,7 @@ export default {
             width: 100%;
             align-items: flex-start;
             .val {
-                width: 465px;
+                width: 485px;
             }
         }
 

+ 55 - 28
src/main/vue/src/views/organization/RateEdit.vue

@@ -7,19 +7,16 @@
             label-width="110px"
             label-position="right"
             size="small"
-            style="max-width: 620px;"
+            style="max-width: 640px;"
         >
+            <el-divider direction="horizontal" content-position="left">基本信息</el-divider>
             <div class="info-content">
                 <!-- <div class="tag" v-if="grade">{{ grade }}</div> -->
                 <div class="info-item">
                     <!-- <div class="name">机构名称</div> -->
                     <div class="val">
                         <el-form-item prop="name" label="承办单位名称">
-                            <el-input
-                                v-model="formData.name"
-                                placeholder="请输入承办单位名称"
-                                :readonly="readonly"
-                            ></el-input>
+                            <el-input v-model="formData.name" placeholder="请输入承办单位名称" readonly></el-input>
                         </el-form-item>
                     </div>
                 </div>
@@ -27,11 +24,7 @@
                     <!-- <div class="name">负责人邮箱</div> -->
                     <div class="val">
                         <el-form-item prop="name" label="负责人邮箱">
-                            <el-input
-                                v-model="formData.ownerEmail"
-                                placeholder="请输入负责人邮箱"
-                                :readonly="readonly"
-                            ></el-input>
+                            <el-input v-model="formData.ownerEmail" placeholder="请输入负责人邮箱" readonly></el-input>
                         </el-form-item>
                     </div>
                 </div>
@@ -39,11 +32,7 @@
                     <!-- <div class="name">负责人</div> -->
                     <div class="val">
                         <el-form-item prop="owner" label="负责人">
-                            <el-input
-                                v-model="formData.owner"
-                                placeholder="请输入负责人"
-                                :readonly="readonly"
-                            ></el-input>
+                            <el-input v-model="formData.owner" placeholder="请输入负责人" readonly></el-input>
                         </el-form-item>
                     </div>
                 </div>
@@ -51,11 +40,7 @@
                     <!-- <div class="name">负责人电话</div> -->
                     <div class="val">
                         <el-form-item prop="ownerPhone" label="负责人电话">
-                            <el-input
-                                v-model="formData.ownerPhone"
-                                placeholder="请输入负责人电话"
-                                :readonly="readonly"
-                            ></el-input>
+                            <el-input v-model="formData.ownerPhone" placeholder="请输入负责人电话" readonly></el-input>
                         </el-form-item>
                     </div>
                 </div>
@@ -101,7 +86,43 @@
                         </el-form-item>
                     </div>
                 </div>
-                <div class="info-item address" v-if="formData.undertakeExamination">
+                <div class="info-item">
+                    <div class="val">
+                        <el-form-item prop="district" label="考级机构">
+                            <el-select v-model="formData.district" style="width:190px">
+                                <el-option
+                                    v-for="item in districts"
+                                    :key="item.id"
+                                    :value="item.name"
+                                    :label="item.name"
+                                    :disabled="readonly"
+                                ></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </div>
+                    <div class="val">
+                        <el-form-item prop="district" label="代理专业">
+                            <el-select v-model="formData.district" style="width:190px">
+                                <el-option
+                                    v-for="item in districts"
+                                    :key="item.id"
+                                    :value="item.name"
+                                    :label="item.name"
+                                    :disabled="readonly"
+                                ></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </div>
+                </div>
+                <div class="info-item address">
+                    <div class="val">
+                        <el-form-item prop="privacyPolicy" label="合作协议">
+                            <file-upload v-model="formData.privacyPolicy" :readonly="readonly"></file-upload>
+                            <!-- <single-upload v-model="formData.privacyPolicy"></single-upload> -->
+                        </el-form-item>
+                    </div>
+                </div>
+                <!-- <div class="info-item address" v-if="formData.undertakeExamination">
                     <div class="name"></div>
                     <div class="val">
                         <el-tag
@@ -135,8 +156,9 @@
                             >
                         </div>
                     </div>
-                </div>
+                </div> -->
             </div>
+            <el-divider direction="horizontal" content-position="left">企业资质</el-divider>
             <div class="info-content">
                 <div class="info-item address">
                     <!-- <div class="name">法人资格</div> -->
@@ -164,6 +186,7 @@
                     </div>
                 </div>
             </div>
+            <el-divider direction="horizontal" content-position="left">物质条件</el-divider>
             <div class="info-content">
                 <div class="info-item address">
                     <!-- <div class="name">消防卫生</div> -->
@@ -244,7 +267,7 @@
                                 (formData.status == 'FIRST_REVIEW_PENDING' || formData.status == 'FIRST_REVIEW_DENY') &&
                                 readonly
                         "
-                        >取消申请
+                        >撤回
                     </el-button>
                     <el-button @click="$router.go(-1)">返回</el-button>
                 </div>
@@ -398,7 +421,8 @@ export default {
                         trigger: 'blur'
                     }
                 ]
-            }
+            },
+            collaborates: []
         };
     },
     methods: {
@@ -434,6 +458,9 @@ export default {
             if (this.formData.status == 'EXPERT_DENY') {
                 data.status = 'SUBMIT_GRADE';
             }
+            if (!isSubmit) {
+                data.status = 'DRAFT';
+            }
             data.submit = isSubmit;
             this.saving = true;
             this.$http
@@ -474,7 +501,7 @@ export default {
 <style lang="less" scoped>
 .info-content {
     // background: #f5f7fa;
-    padding: 30px 10px 25px;
+    padding: 20px 10px 25px;
     margin: 2px auto;
     display: flex;
     flex-wrap: wrap;
@@ -490,7 +517,7 @@ export default {
             width: 100%;
             align-items: flex-start;
             .val {
-                width: 580px;
+                width: 600px;
             }
         }
 
@@ -507,7 +534,7 @@ export default {
 
         .val {
             // width: 190px;
-            width: 280px;
+            width: 300px;
         }
 
         .input {

+ 1 - 1
src/test/java/com/izouma/wenlvju/repo/RateExpertAuditRepoTest.java

@@ -15,7 +15,7 @@ public class RateExpertAuditRepoTest extends ApplicationTests {
     public void test() {
         rateExpertAuditRepo.save(RateExpertAudit.builder()
                 .rateId(136L)
-                .userId(25L)
+                //.userId(25L)
                 .remark("测试备注")
                 .img(CollUtil.newArrayList("https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-04-09-11-17-06YrVCsdEQ.png",
                         "https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-04-08-14-45-42CvVMClla.jpg"))