licailing 5 лет назад
Родитель
Сommit
ca602ba54a

+ 19 - 0
src/main/java/com/izouma/wenlvju/domain/MessageRecord.java

@@ -0,0 +1,19 @@
+package com.izouma.wenlvju.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class MessageRecord extends BaseEntity{
+    private String phone;
+
+    private String requestContent;
+
+    private String responseContent;
+}

+ 11 - 1
src/main/java/com/izouma/wenlvju/service/RateExpertAuditService.java

@@ -3,11 +3,13 @@ package com.izouma.wenlvju.service;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.wenlvju.domain.GradeRule;
 import com.izouma.wenlvju.domain.Rate;
+import com.izouma.wenlvju.domain.RateAudit;
 import com.izouma.wenlvju.domain.RateExpertAudit;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.enums.OrganizationGrade;
 import com.izouma.wenlvju.enums.RateStatus;
 import com.izouma.wenlvju.exception.BusinessException;
+import com.izouma.wenlvju.repo.RateAuditRepo;
 import com.izouma.wenlvju.repo.RateExpertAuditRepo;
 import com.izouma.wenlvju.repo.RateRepo;
 import com.izouma.wenlvju.service.sms.NjwlSmsService;
@@ -26,6 +28,7 @@ public class RateExpertAuditService {
     private final RateExpertAuditRepo rateExpertAuditRepo;
     private final RateRepo            rateRepo;
     private final NjwlSmsService      njwlSmsService;
+    private final RateAuditRepo       rateAuditRepo;
 
     public Page<RateExpertAudit> all(PageQuery pageQuery) {
         return rateExpertAuditRepo.findAll(JpaUtils.toSpecification(pageQuery, RateExpertAudit.class), JpaUtils.toPageRequest(pageQuery));
@@ -51,7 +54,7 @@ public class RateExpertAuditService {
         });
     }
 
-    public void grade(Long rateId) {
+    public void grade(Long rateId, Long userId) {
         List<RateExpertAudit> audits = rateExpertAuditRepo.findAllByRateId(rateId);
         int sum = audits.stream().mapToInt(RateExpertAudit::getExpertScore).sum();
         OrganizationGrade grade;
@@ -67,6 +70,13 @@ public class RateExpertAuditService {
         rate.setGrade(grade);
         rate.setStatus(RateStatus.SUBMIT_PAPER_MATERIALS);
         rateRepo.save(rate);
+        RateAudit rateAudit = RateAudit.builder()
+                .userId(userId)
+                .rateId(rateId)
+                .remark("市政管理员已评审完成,请你单位在5个工作日内将纸质申请材料(2份)送属地区文化行政主管部门。")
+                .status(RateStatus.SUBMIT_PAPER_MATERIALS)
+                .build();
+        rateAuditRepo.save(rateAudit);
         // 市区评分发送短信
         njwlSmsService.sendSms(rate.getOwnerPhone(), "请你单位在5个工作日内将纸质申请材料(2份)送属地区文化行政主管部门,预期不送,作自动放弃处理。");
     }

+ 5 - 0
src/main/java/com/izouma/wenlvju/service/sms/NjwlSmsService.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.parser.Feature;
 import com.github.kevinsawicki.http.HttpRequest;
+import com.izouma.wenlvju.domain.MessageRecord;
 import com.izouma.wenlvju.domain.SmsRecord;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.SmsRecordRepo;
@@ -98,6 +99,10 @@ public class NjwlSmsService {
 
         String responseBody = writer.toString();
         log.info(responseBody);
+//        MessageRecord.builder()
+//                .requestContent(body)
+//                .responseContent(responseBody)
+//                .build();
 //        Map<String, Object> formMap = JSON.parseObject(responseBody, LinkedHashMap.class, Feature.OrderedField);//关键的地方,转化为有序map
 //
 //        Object success = formMap.get("Code");

+ 13 - 1
src/main/java/com/izouma/wenlvju/web/AuthenticationController.java

@@ -1,5 +1,7 @@
 package com.izouma.wenlvju.web;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
 import com.izouma.wenlvju.domain.User;
 import com.izouma.wenlvju.enums.AuthorityName;
 import com.izouma.wenlvju.exception.AuthenticationException;
@@ -20,6 +22,8 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.Objects;
 
 @Slf4j
@@ -35,7 +39,15 @@ public class AuthenticationController {
     public String loginByUserPwd(String username, String password, Integer expiration) {
         Authentication authentication = authenticate(username, password);
         JwtUser jwtUser = (JwtUser) authentication.getPrincipal();
-        return jwtTokenUtil.generateToken(jwtUser);
+        LocalDate start = Convert.convert(LocalDate.class, "2021-6-2");
+        if (authentication.getAuthorities()
+                .contains(new SimpleGrantedAuthority(AuthorityName.ROLE_ADMIN.name()))) {
+            return jwtTokenUtil.generateToken(jwtUser);
+        } else if (LocalDate.now().isAfter(start)) {
+            return jwtTokenUtil.generateToken(jwtUser);
+        }
+        throw new AuthenticationException("禁止登录", null);
+
     }
 
     @PostMapping("/loginAdmin")

+ 3 - 2
src/main/java/com/izouma/wenlvju/web/RateExpertAuditController.java

@@ -8,6 +8,7 @@ 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;
@@ -49,8 +50,8 @@ public class RateExpertAuditController extends BaseController {
     }
 
     @PostMapping("/grade")
-    public void grade(Long rateId){
-        rateExpertAuditService.grade(rateId);
+    public void grade(Long rateId) {
+        rateExpertAuditService.grade(rateId, SecurityUtils.getAuthenticatedUser().getId());
     }
 
 

+ 7 - 0
src/main/java/com/izouma/wenlvju/web/UserController.java

@@ -1,11 +1,13 @@
 package com.izouma.wenlvju.web;
 
+import cn.hutool.core.convert.Convert;
 import com.izouma.wenlvju.domain.User;
 import com.izouma.wenlvju.dto.ExpertDTO;
 import com.izouma.wenlvju.dto.OrganizationRegDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.UserRegister;
 import com.izouma.wenlvju.enums.AuthorityName;
+import com.izouma.wenlvju.exception.AuthenticationException;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.UserRepo;
 import com.izouma.wenlvju.security.Authority;
@@ -24,6 +26,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -50,6 +53,10 @@ public class UserController extends BaseController {
 
     @PostMapping("/regOrganization")
     public User regOrganization(@RequestBody OrganizationRegDTO dto) {
+        LocalDate start = Convert.convert(LocalDate.class, "2021-6-3");
+        if (LocalDate.now().isBefore(start)) {
+            throw new AuthenticationException("系统暂未开放注册", null);
+        }
         return userService.regOrganization(dto);
     }
 

+ 2 - 2
src/main/vue/src/plugins/http.js

@@ -5,8 +5,8 @@ import qs from 'qs';
 let baseUrl = 'http://localhost:8080';
 switch (process.env.NODE_ENV) {
     case 'development':
-        // baseUrl = 'http://localhost:8080';
-        baseUrl = 'http://wlj.izouma.com';
+        baseUrl = 'http://localhost:8080';
+        // baseUrl = 'http://wlj.izouma.com';
         break;
     case 'test':
         baseUrl = 'http://localhost:8080';

+ 126 - 24
src/main/vue/src/views/organization/OrganizationEdit.vue

@@ -4,12 +4,13 @@
             :model="formData"
             :rules="rules"
             ref="form"
-            label-width="128px"
+            label-width="108px"
             label-position="right"
             size="small"
-            style="max-width: 550px;"
+            style="max-width: 660px;"
+            inline
         >
-            <el-form-item prop="businessLicense" label="营业执照">
+            <!-- <el-form-item prop="businessLicense" label="营业执照">
                 <single-upload v-model="formData.businessLicense"></single-upload>
             </el-form-item>
             <el-form-item prop="name" label="承办单位名称">
@@ -19,16 +20,14 @@
                 <el-input v-model="formData.uscc" placeholder="请输入统一社会信用代码"></el-input>
             </el-form-item>
             <el-form-item prop="district" label="地址">
-                <!-- <el-select v-model="formData.district" clearable filterable placeholder="请选择">
+                <el-select v-model="formData.district" style="width:100%">
                     <el-option
-                        v-for="item in districtOptions"
-                        :key="item.value"
-                        :label="item.label"
+                        v-for="(item, index) in districtOptions"
+                        :key="index"
                         :value="item.value"
-                    >
-                    </el-option>
-                </el-select> -->
-                <district-choose v-model="formData.district1"></district-choose>
+                        :label="item.label"
+                    ></el-option>
+                </el-select>
                 <el-input
                     type="textarea"
                     :autosize="{ minRows: 3, maxRows: 4 }"
@@ -43,16 +42,94 @@
             <el-form-item prop="privacyPolicy" label="法人姓名">
                 <el-input v-model="formData.privacyPolicy" placeholder="请输入法人姓名"></el-input>
             </el-form-item>
-            <el-form-item prop="IDNo" label="证件号码">
-                <el-input v-model="formData.IDNo" placeholder="请输入证件号码"></el-input>
+            <el-form-item prop="idNo" label="证件号码">
+                <el-input v-model="formData.idNo" placeholder="请输入证件号码"></el-input>
             </el-form-item>
             <el-form-item>
-                <el-button @click="onSave" :loading="saving" type="primary" v-if="this.$route.query.organId"
-                    >保存基本信息</el-button
-                >
-                <el-button @click="onNew" :loading="saving" type="primary" v-else>保存基本信息</el-button>
-                <!-- <el-button @click="onDelete" :loading="saving" type="danger" v-if="formData.id">删除 </el-button> -->
+                <el-button @click="onSave" :loading="saving" type="primary">保存</el-button>
+                <el-button @click="onDelete" :loading="saving" type="danger" v-if="formData.id">删除 </el-button>
                 <el-button @click="$router.go(-1)">取消</el-button>
+            </el-form-item> -->
+            <div class="info-content">
+                <el-form-item label="承办单位名称" prop="name">
+                    <el-input v-model="formData.name" placeholder="请输入承办单位名称"></el-input>
+                </el-form-item>
+                <el-form-item label="负责人" prop="owner">
+                    <el-input v-model="formData.owner" placeholder="请输入负责人"></el-input>
+                </el-form-item>
+                <el-form-item label="负责人邮箱" prop="ownerEmail">
+                    <el-input v-model="formData.ownerEmail" placeholder="请输入负责人邮箱"></el-input>
+                </el-form-item>
+                <el-form-item label="负责人电话" prop="ownerPhone">
+                    <el-input v-model="formData.ownerPhone" placeholder="请输入负责人电话"></el-input>
+                </el-form-item>
+                <el-form-item label="法人姓名" prop="privacyPolicy">
+                    <el-input v-model="formData.privacyPolicy" placeholder="请输入法人姓名"></el-input>
+                </el-form-item>
+                <el-form-item label="证件号码" prop="idNo">
+                    <el-input v-model="formData.idNo" placeholder="请输入证件号码"></el-input>
+                </el-form-item>
+                <el-form-item label="信用代码" prop="uscc">
+                    <el-input
+                        v-model="formData.uscc"
+                        placeholder="请输入统一社会信用代码"
+                        style="width:490px"
+                    ></el-input>
+                </el-form-item>
+                <el-form-item label="地址" prop="district" class="address">
+                    <el-select v-model="formData.district" style="width:100%">
+                        <el-option
+                            v-for="(item, index) in districtOptions"
+                            :key="index"
+                            :value="item.value"
+                            :label="item.label"
+                        ></el-option>
+                    </el-select>
+                </el-form-item>
+
+                <el-form-item label=" " prop="address" class="address">
+                    <el-input
+                        type="textarea"
+                        :autosize="{ minRows: 3, maxRows: 4 }"
+                        style="width:100%"
+                        placeholder="请输入详细地址"
+                        v-model="formData.address"
+                    ></el-input>
+                </el-form-item>
+                <el-form-item label="所属考级机构" prop="gradingOrganizationId">
+                    <el-select
+                        v-model="formData.gradingOrganizationId"
+                        placeholder="所属考级机构"
+                        multiple
+                        style="width:490px"
+                    >
+                        <el-option
+                            v-for="(item, index) in examination"
+                            :key="index"
+                            :value="item.value"
+                            :label="item.label"
+                        ></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="经营范围" prop="businessScope" class="address">
+                    <el-input
+                        type="textarea"
+                        :autosize="{ minRows: 5, maxRows: 7 }"
+                        placeholder="请输入经营范围"
+                        v-model="formData.businessScope"
+                        style="width:100%"
+                    ></el-input>
+                </el-form-item>
+                <el-form-item label="营业执照" prop="businessLicense" class="address">
+                    <single-upload v-model="formData.businessLicense"></single-upload>
+                </el-form-item>
+            </div>
+            <el-form-item class="fixed-btn">
+                <!-- <el-button @click="readonly = false" :loading="saving" type="success">编辑</el-button> -->
+                <div style="margin: 10px">
+                    <el-button @click="onSave" :loading="saving" type="primary">保存</el-button>
+                </div>
+                <!-- <el-button @click="$router.go(-1)">取消</el-button> -->
             </el-form-item>
         </el-form>
     </div>
@@ -62,9 +139,9 @@ import { mapState } from 'vuex';
 export default {
     name: 'OrganizationEdit',
     created() {
-        if (this.$route.query.organId) {
+        if (this.$route.query.id) {
             this.$http
-                .get('organization/get/' + this.$route.query.organId)
+                .get('organization/get/' + this.$route.query.id)
                 .then(res => {
                     this.formData = res;
                 })
@@ -93,6 +170,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);
+            });
     },
     data() {
         return {
@@ -107,7 +200,8 @@ export default {
                 IDNo: ''
             },
             rules: {},
-            districtOptions: []
+            districtOptions: [],
+            examination: []
         };
     },
     computed: {
@@ -191,7 +285,7 @@ export default {
 </script>
 <style lang="less" scoped>
 .info-content {
-    background: #f5f7fa;
+    // background: #f5f7fa;
     padding: 39px 25px 25px;
     margin: 5px auto;
     display: flex;
@@ -208,7 +302,7 @@ export default {
             width: 100%;
             align-items: flex-start;
             .val {
-                width: 465px;
+                width: 485px;
             }
         }
 
@@ -218,7 +312,7 @@ export default {
             font-weight: 400;
             color: #565b66;
             line-height: 22px;
-            min-width: 60px;
+            min-width: 75px;
             margin-right: 10px;
             text-align: right;
         }
@@ -228,4 +322,12 @@ export default {
         }
     }
 }
+
+/deep/ .address {
+    display: flex;
+    width: 100%;
+    .el-form-item__content {
+        flex-grow: 1;
+    }
+}
 </style>

+ 5 - 5
src/main/vue/src/views/organization/OrganizationList.vue

@@ -25,9 +25,9 @@
             :height="tableHeight"
         >
             <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
-            <el-table-column prop="id" label="ID" width="100"> </el-table-column>
+            <el-table-column prop="id" label="ID" width="80"> </el-table-column>
             <el-table-column prop="name" label="承办单位名称"> </el-table-column>
-            <el-table-column prop="district" label="区"> </el-table-column>
+            <el-table-column prop="district" label="所属"> </el-table-column>
             <el-table-column prop="businessLicense" label="营业执照">
                 <template slot-scope="{ row }">
                     <el-image
@@ -40,12 +40,12 @@
             </el-table-column>
             <el-table-column prop="owner" label="负责人"> </el-table-column>
             <el-table-column prop="privacyPolicy" label="法人姓名"> </el-table-column>
-            <el-table-column prop="IDNo" label="证件号码"> </el-table-column>
-            <el-table-column prop="introduction" label="简介"> </el-table-column>
+            <el-table-column prop="idNo" label="证件号码"> </el-table-column>
+            <el-table-column prop="businessScope" label="经营范围" min-width="150"> </el-table-column>
             <el-table-column label="操作" align="center" fixed="right" min-width="150">
                 <template slot-scope="{ row }">
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
-                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
+                    <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                 </template>
             </el-table-column>
         </el-table>

+ 11 - 1
src/main/vue/src/views/user/UserList.vue

@@ -4,6 +4,14 @@
             <el-input placeholder="输入关键字" v-model="search" clearable class="filter-item"></el-input>
             <el-button @click="getData" type="primary" icon="el-icon-search" class="filter-item">搜索 </el-button>
             <el-button @click="addRow" type="primary" icon="el-icon-plus" class="filter-item">添加 </el-button>
+            <!-- <el-select v-model="authority" placeholder="请选择权限">
+                <el-option
+                    v-for="item in authorities"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                ></el-option>
+            </el-select> -->
             <!-- <el-button
                 @click="download"
                 type="primary"
@@ -73,7 +81,9 @@ export default {
             multipleMode: false,
             search: '',
             url: '/user/all2',
-            downloading: false
+            downloading: false,
+            authority: '',
+            authorities: [{ label: '管理员', value: 'ROLE_ADMIN' }]
         };
     },
     computed: {

+ 53 - 0
src/test/java/com/izouma/wenlvju/VoiceTests.java

@@ -0,0 +1,53 @@
+package com.izouma.wenlvju;
+
+import cn.hutool.core.convert.Convert;
+import com.github.kevinsawicki.http.HttpRequest;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.time.LocalDate;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class VoiceTests {
+    String appKey    = "7851448260f84d6a83585adfff7301d8";
+    String appSecret = "7bd9a092d6ae0f373e9168d85d238efe";
+
+    @Test
+    public void testToken() {
+        String uri = "https://open.ys7.com/api/lapp/token/get";
+        String body = "appKey=" + appKey + "&appSecret=" + appSecret;
+        System.out.println(body);
+        HttpRequest.post(uri).send(body).receive(System.out);
+    }
+
+    @Test
+    public void testAdd(){
+        String uri = "https://open.ys7.com/api/lapp/device/add";
+        String accessToken = "at.bgdp2ewu1btz9gl47vco9rckdexx5p32-8oic3wp6h3-0manyiu-oc0vsrvpy";
+        String deviceSerial = "F75663984";
+        String validateCode= "PKDYXQ";
+        String body = "accessToken=" + accessToken + "&deviceSerial=" + deviceSerial + "&validateCode=" + validateCode;
+        System.out.println(body);
+        HttpRequest.post(uri).send(body).receive(System.out);
+    }
+
+    @Test
+    public void testDel(){
+        String uri = "https://open.ys7.com/api/lapp/device/delete";
+        String accessToken = "at.bgdp2ewu1btz9gl47vco9rckdexx5p32-8oic3wp6h3-0manyiu-oc0vsrvpy";
+        String deviceSerial = "F75663984";
+        String body = "accessToken=" + accessToken + "&deviceSerial=" + deviceSerial;
+        System.out.println(body);
+        HttpRequest.post(uri).send(body).receive(System.out);
+    }
+
+    @Test
+    public void test(){
+        LocalDate start = Convert.convert(LocalDate.class, "2021-6-1");
+//        System.out.println(LocalDate.now().isBefore(start));
+        System.out.println(LocalDate.now().isAfter(start));
+    }
+}