Browse Source

完成微校消息通知

binguoc 4 năm trước cách đây
mục cha
commit
f45db81d69
25 tập tin đã thay đổi với 835 bổ sung349 xóa
  1. 15 1
      pom.xml
  2. 1 0
      src/main/java/com/chuanghai/repair/RepairsApplication.java
  3. 0 162
      src/main/java/com/chuanghai/repair/auth/CrossInfoCache.java
  4. 0 39
      src/main/java/com/chuanghai/repair/auth/JSONAuthentication.java
  5. 6 0
      src/main/java/com/chuanghai/repair/auth/SwaggerConfig.java
  6. 19 2
      src/main/java/com/chuanghai/repair/controller/AutoSendOrderCentroller.java
  7. 3 2
      src/main/java/com/chuanghai/repair/controller/BuildRoomController.java
  8. 71 33
      src/main/java/com/chuanghai/repair/controller/LoginController.java
  9. 157 107
      src/main/java/com/chuanghai/repair/controller/OrderController.java
  10. 7 0
      src/main/java/com/chuanghai/repair/entity/RepairsAdmin.java
  11. 6 1
      src/main/java/com/chuanghai/repair/entity/RepairsWork.java
  12. 8 0
      src/main/java/com/chuanghai/repair/mapper/RepairsOrderMapper.java
  13. 9 0
      src/main/java/com/chuanghai/repair/mapper/RepairsStudentMapper.java
  14. 9 0
      src/main/java/com/chuanghai/repair/service/RepairsOrderService.java
  15. 9 0
      src/main/java/com/chuanghai/repair/service/RepairsStudentService.java
  16. 11 0
      src/main/java/com/chuanghai/repair/service/ServiceImpl/RepairsOrderServiceImpl.java
  17. 13 0
      src/main/java/com/chuanghai/repair/service/ServiceImpl/RepairsStudentServiceImpl.java
  18. 228 2
      src/main/java/com/chuanghai/repair/utils/CreateTokenUtil.java
  19. 60 0
      src/main/java/com/chuanghai/repair/utils/FileUtil.java
  20. 150 0
      src/main/java/com/chuanghai/repair/utils/ReturnValueUtil.java
  21. 5 0
      src/main/resources/application.yml
  22. 19 0
      src/main/resources/mapper/RepairsOrderMapper.xml
  23. 21 0
      src/main/resources/mapper/RepairsStudentMapper.xml
  24. BIN
      src/main/resources/static/images/6b7a6d25-c1e0-433a-b935-18bfecb24ec8person.jpg
  25. 8 0
      src/test/java/com/chuanghai/RepairsApplicationTests.java

+ 15 - 1
pom.xml

@@ -51,11 +51,12 @@
             <version>1.2.4</version>
         </dependency>
         <dependency>
-
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-io</artifactId>
             <version>1.3.2</version>
         </dependency>
+
+
         <dependency>
             <groupId>commons-codec</groupId>
             <artifactId>commons-codec</artifactId>
@@ -173,6 +174,19 @@
             <artifactId>ehcache</artifactId>
         </dependency>
 
+        <!--第一种方式导入校验依赖-->
+        <dependency>
+            <groupId>javax.validation</groupId>
+            <artifactId>validation-api</artifactId>
+            <version>2.0.1.Final</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-commons</artifactId>
+            <version>2.2.3.RELEASE</version>
+        </dependency>
+
+
     </dependencies>
 
 

+ 1 - 0
src/main/java/com/chuanghai/repair/RepairsApplication.java

@@ -11,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 
 
 @SpringBootApplication
+@EnableScheduling //设置定时任务
 public class RepairsApplication {
 
     public static void main(String[] args) {

+ 0 - 162
src/main/java/com/chuanghai/repair/auth/CrossInfoCache.java

@@ -1,162 +0,0 @@
-package com.chuanghai.repair.auth;
-
-import java.time.Duration;
-import java.time.LocalDateTime;
-import java.util.Map;
-import java.util.Set;
-import java.util.TimerTask;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-/**
- * @Author: bingo
- * @Date: 2022/3/2 星期三 9:28
- * @Description: com.chuanghai.repair.auth
- * @version: 1.0
- */
-public class CrossInfoCache {
-    /**
-     * 默认缓存时长 单位s
-     */
-    private static final int DEFAULT_TIMEOUT = 3600;
-
-    /**
-     * 默认缓存容量
-     */
-    private static final int DEFAULT_SIZE = 10000;
-
-    /**
-     * 存储数据
-     */
-    private static final Map<String, Object> data;
-
-    /**
-     * 定时器  用来控制 缓存的超时时间
-     */
-    private static final ScheduledExecutorService executorService;
-
-    // 初始化
-    static {
-        data = new ConcurrentHashMap<>(DEFAULT_SIZE);
-        executorService = new ScheduledThreadPoolExecutor(2);
-    }
-
-    /**
-     * 私有化构造函数
-     */
-    private CrossInfoCache() {
-    }
-
-
-
-    /**
-     * 增加缓存 默认有效时长
-     *
-     * @param key
-     * @param value
-     */
-    public static void put(String key, Object value) {
-        data.put(key, value);
-        executorService.schedule(new TimerTask() {
-            @Override
-            public void run() {
-                remove(key);
-            }
-        }, DEFAULT_TIMEOUT, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 增加缓存  并设置缓存时长 单位 s
-     *
-     * @param key
-     * @param value
-     * @param timeout 缓存时长 单位s
-     */
-    public static void put(String key, Object value, int timeout) {
-        data.put(key, value);
-
-        executorService.schedule(() -> remove(key), timeout, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 增加缓存 并指定过期时间点
-     *
-     * @param key
-     * @param value
-     * @param expireTime 指定过期时间点
-     */
-    public static void put(String key, Object value, LocalDateTime expireTime) {
-        data.put(key, value);
-        LocalDateTime nowTime = LocalDateTime.now();
-        long seconds = Duration.between(nowTime, expireTime).getSeconds();
-        executorService.schedule(() -> remove(key), seconds, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 获取缓存
-     *
-     * @param key
-     * @return
-     */
-    public static Object get(String key) {
-        return data.get(key);
-    }
-
-    /**
-     * 获取当前缓存中 所有的key
-     *
-     * @return
-     */
-    public static Set<String> cacheKeys() {
-        return data.keySet();
-    }
-
-    /**
-     * 获取当前缓存所有内容
-     *
-     * @return
-     */
-    public static Map<String, Object> allCache() {
-        return data;
-    }
-
-    /**
-     * 判断缓存是否包含key
-     *
-     * @param key
-     * @return
-     */
-    public boolean containKey(String key) {
-        return data.containsKey(key);
-    }
-
-    /**
-     * 获取当前缓存大小
-     *
-     * @return
-     */
-    public static int size() {
-        return data.size();
-    }
-
-    /**
-     * 删除缓存
-     *
-     * @param key
-     */
-    public static void remove(String key) {
-        data.remove(key);
-    }
-
-    /**
-     * 清空所有缓存
-     */
-    public static void clear() {
-        if (size() > 0) {
-            data.clear();
-        }
-    }
-
-}

+ 0 - 39
src/main/java/com/chuanghai/repair/auth/JSONAuthentication.java

@@ -1,39 +0,0 @@
-package com.chuanghai.repair.auth;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-/**
- * @Author: bingo
- * @Date: 2022/2/23 星期三 22:29
- * @Description: com.chuanghai.repair.auth
- * @version: 1.0
- */
-
-/**
- * f封装JSON 格式的数据*/
-public abstract class JSONAuthentication {
-
-    protected void WriteJSON(HttpServletRequest request,
-                             HttpServletResponse response,
-                             Object data)throws IOException,ServletException{
-        response.setContentType("application/json;charset=UTF-8");
-        //处理JSON跨域问题
-        response.setHeader("Access-Control-Allow-Origin","*");
-        response.setHeader("Access-Control-Allow-method","POST,GET");
-        //输出JSON
-        PrintWriter out = response.getWriter();
-        out.write(new ObjectMapper().writeValueAsString(data));
-        out.flush();
-        out.close();
-
-    }
-}

+ 6 - 0
src/main/java/com/chuanghai/repair/auth/SwaggerConfig.java

@@ -2,6 +2,8 @@ package com.chuanghai.repair.auth;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
 import springfox.documentation.builders.ApiInfoBuilder;
 import springfox.documentation.builders.PathSelectors;
 import springfox.documentation.builders.RequestHandlerSelectors;
@@ -10,6 +12,8 @@ import springfox.documentation.spi.DocumentationType;
 import springfox.documentation.spring.web.plugins.Docket;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
+import javax.annotation.Resource;
+
 /**
  * @Author: bingo
  * @Date: 2022/2/24 星期四 11:16
@@ -31,4 +35,6 @@ public class SwaggerConfig {
         return new ApiInfoBuilder().title("学校报修系统").description("测试系统")
                 .termsOfServiceUrl("http://localhost:8080/").version("1.0").build();
     }
+
+
 }

+ 19 - 2
src/main/java/com/chuanghai/repair/controller/AutoSendOrderCentroller.java

@@ -1,19 +1,29 @@
 package com.chuanghai.repair.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.chuanghai.repair.entity.RepairsOrder;
 import com.chuanghai.repair.service.RepairsOrderService;
 import com.chuanghai.repair.service.RepairsWorkService;
+import com.chuanghai.repair.utils.CreateTokenUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.context.ApplicationListener;
 import org.springframework.context.event.ContextRefreshedEvent;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
+import java.net.URI;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -26,7 +36,7 @@ import java.util.*;
  * 重写了onApplicationEvent方法,使项目启动之后自动执行该方法 实现订单自动分配
  */
 
-/*
+
 @Api(tags = "自动派单管理")
 @RestController
 @RequestMapping("/auto")
@@ -41,8 +51,15 @@ public class AutoSendOrderCentroller implements ApplicationListener<ContextRefre
 
     static HashMap<String, String> orderMap = new HashMap<>();
 
+    @ApiOperation("自动查询订单")
+    @Override
+    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
 
-    */
+    }
+
+
+
+}
 /**
      * 优化: 在订单表加个字段(订单类型  水电工 木工等)对应维修工的类型       根据未接单  订单类型 将木工订单分配给木工师傅
      *//*

+ 3 - 2
src/main/java/com/chuanghai/repair/controller/BuildRoomController.java

@@ -3,6 +3,7 @@ package com.chuanghai.repair.controller;
 import com.chuanghai.repair.entity.RepairsRoom;
 import com.chuanghai.repair.mapper.RepairsBuildRoomMapper;
 import com.chuanghai.repair.service.RepairsBuildRoomService;
+import com.chuanghai.repair.utils.ReturnValueUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -32,13 +33,13 @@ public class BuildRoomController {
      */
     @ApiOperation("宿舍信息")
     @PostMapping(value = "/queryAllBuildRoom")
-    public List<RepairsRoom> queryAllBuildRoom(){
+    public ReturnValueUtil queryAllBuildRoom(){
         List<RepairsRoom> roomList = null;
         try {
             roomList = repairsBuildRoomService.queryAllBuildRoom();
         }catch (Exception e){
             e.printStackTrace();
         }
-        return roomList;
+        return ReturnValueUtil.ok(roomList);
     }
 }

+ 71 - 33
src/main/java/com/chuanghai/repair/controller/LoginController.java

@@ -2,43 +2,32 @@ package com.chuanghai.repair.controller;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.auth0.jwt.JWT;
-import com.auth0.jwt.interfaces.DecodedJWT;
-import com.chuanghai.repair.auth.CrossInfoCache;
-import com.chuanghai.repair.auth.JSONAuthentication;
 import com.chuanghai.repair.entity.RepairsAdmin;
+import com.chuanghai.repair.entity.RepairsOrder;
 import com.chuanghai.repair.entity.RepairsStudent;
 import com.chuanghai.repair.entity.RepairsWork;
 import com.chuanghai.repair.service.RepairsAdminService;
+import com.chuanghai.repair.service.RepairsOrderService;
 import com.chuanghai.repair.service.RepairsStudentService;
 import com.chuanghai.repair.service.RepairsWorkService;
-import com.chuanghai.repair.utils.CreateTokenUtil;
-import com.sun.deploy.net.URLEncoder;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.*;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.client.RestTemplate;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
 import java.net.URI;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Author: bingo
@@ -46,6 +35,7 @@ import java.util.Set;
  * @Description: com.chuanghai.repair.controller
  * @version: 1.0
  */
+@Slf4j
 @Api(tags = "登录管理")
 @RestController
 @RequestMapping("/login")
@@ -60,6 +50,14 @@ public class LoginController {
     @Resource(name = "repairsStudentService")
     private RepairsStudentService repairsStudentService;
 
+    @Resource(name = "repairsOrderService")
+    private RepairsOrderService repairsOrderService;
+
+    @Setter
+    @Getter
+    private String accessToken;
+
+
     /**
      * 管理员登录
      *
@@ -69,11 +67,12 @@ public class LoginController {
     @ApiOperation("管理员登录")
     @PostMapping(value = "/loginAdmin")
     public String loginAdmin(@ApiParam(name = "管理员手机号码", required = true) String phone,
-                                   @ApiParam(name = "管理员密码", required = true) String password) {
+                             @ApiParam(name = "管理员密码", required = true) String password) {
         String adminIdToken = "";
         try {
             RepairsAdmin repairsAdmin = repairsAdminService.loginAdmin(phone, password);
-            adminIdToken = CreateTokenUtil.getToken(String.valueOf(repairsAdmin.getAdminId()));
+         //   adminIdToken = CreateTokenUtil.getToken(String.valueOf(repairsAdmin.getAdminId()));
+
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -94,14 +93,14 @@ public class LoginController {
         String workIdToken = "";
         try {
             RepairsWork repairsWork = repairsWorkService.loginWork(phone, password);
-            workIdToken = CreateTokenUtil.getToken(String.valueOf(repairsWork.getWorkId()));
+          //  workIdToken = CreateTokenUtil.getToken(String.valueOf(repairsWork.getWorkId()));
         } catch (Exception e) {
             e.printStackTrace();
         }
         return workIdToken;
     }
 
-
+    @ApiOperation("获取学生CardNumber")
     @GetMapping("/getCardNumber")
     public JSONObject getCardNumber(String wxcode, String state) {
         JSONObject cardNumberJson = new JSONObject();
@@ -134,16 +133,17 @@ public class LoginController {
             // 此处的泛型  对应 响应体数据   类型;即:这里指定响应体的数据装配为String
             ResponseEntity<String> response = restTemplate.postForEntity(uri, httpEntity, String.class);
             JSONObject objParam = JSON.parseObject(response.getBody());
-            String access_token = "";
+
             for (Map.Entry<String, Object> entry : objParam.entrySet()) {
                 Object o = entry.getValue();
                 if (o instanceof String) {
                     if (entry.getKey().equals("access_token")) {
-                        access_token = (String) entry.getValue();
+                        accessToken = (String) entry.getValue();
                     }
                 }
             }
-            String userInfoUrl = "https://open.wecard.qq.com/connect/oauth/get-user-info?access_token=" + access_token + "&scope=snsapi_base";
+
+            String userInfoUrl = "https://open.wecard.qq.com/connect/oauth/get-user-info?access_token=" + accessToken + "&scope=snsapi_base";
             StringBuffer userInfoURl = new StringBuffer(userInfoUrl);
             // 字符数据最好encoding一下;这样一来,某些特殊字符才能传过去(如:flag的参数值就是“&”,不encoding的话,传不过去)
             // paramsURL.append("?flag=" + URLEncoder.encode("&&", "utf-8"));
@@ -199,18 +199,56 @@ public class LoginController {
             RepairsStudent repairsStudent = new RepairsStudent(studentId, studentName, studentSex,
             studentPhone, studentOtherPhone, studentClazz, dormNumber,
             studentDormitory, studentStatus, studentCampus,cardNumber);
-            System.out.println(studentId);
             RepairsStudent student = repairsStudentService.queryByStudentId(studentId);
-            System.out.println(student);
             if(student==null){
                 repairsStudentService.insertStudent(repairsStudent);
             }
             cardNumberJson.put("card_number",cardNumber);
+            autoQueryOrder();
         } catch (Exception e) {
             e.printStackTrace();
         }
         return cardNumberJson;
     }
 
+    @Scheduled(cron = "0 0/30 * * * ?")
+    public void autoQueryOrder() {
+
+        try {
+//            LocalDateTime now = LocalDateTime.now();
+//            now.plusMinutes(30);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Calendar calendar = Calendar.getInstance();
+            String systemTime = sdf.format(calendar.getTime());
+            calendar.add(Calendar.MINUTE, 30);
+            String changeTime = sdf.format(calendar.getTime());
+
+            List<RepairsOrder> orderList = repairsOrderService.queryByTime(systemTime,changeTime);
+            Set<String> idList = orderList.stream().filter(e -> e.getRepairsStudent() != null)
+                    .map(e -> e.getRepairsStudent().getStudentId()).collect(Collectors.toSet());
+
+            String title = "寝室维修通知";
+            String content = "同学你好,你的寝室报修单已被维修师傅接单,维修师傅将于半小时后上门维修;请合理安排时间,谢谢合作。";
+            String sender = "寝室管理办公室";
+            MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
+            param.add("title", title);
+            param.add("cards", idList);
+            param.add("content", content);
+            param.add("sender", sender);
+            String url = "https://open.wecard.qq.com/cgi-bin/notice/send?access_token="+accessToken;
+
+            RestTemplate restTemplate = new RestTemplate();
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_JSON);
+            HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(param, headers);
+            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+            System.out.println(responseEntity.getBody());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+
 
 }

+ 157 - 107
src/main/java/com/chuanghai/repair/controller/OrderController.java

@@ -5,6 +5,7 @@ import com.chuanghai.repair.entity.RepairsOrder;
 import com.chuanghai.repair.entity.RepairsStudent;
 import com.chuanghai.repair.entity.RepairsWork;
 import com.chuanghai.repair.service.RepairsOrderService;
+import com.chuanghai.repair.service.RepairsStudentService;
 import com.chuanghai.repair.service.RepairsWorkService;
 import com.chuanghai.repair.utils.CreateTokenUtil;
 import com.sun.xml.internal.ws.encoding.XMLHTTPBindingCodec;
@@ -13,12 +14,17 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.apache.catalina.Manager;
 import org.apache.http.util.TextUtils;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.event.ContextRefreshedEvent;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
 import org.thymeleaf.util.DateUtils;
 import sun.util.calendar.BaseCalendar;
 import sun.util.calendar.CalendarUtils;
@@ -26,6 +32,7 @@ import sun.util.calendar.CalendarUtils;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
+import java.io.File;
 import java.math.BigInteger;
 import java.util.*;
 import java.text.SimpleDateFormat;
@@ -45,11 +52,13 @@ public class OrderController {
     @Resource (name = "repairsOrderService")
     private RepairsOrderService repairsOrderService;
 
+    @Resource (name = "repairsStudentService")
+    private RepairsStudentService repairsStudentService;
 
 
+    //------------------------------------------- PC端管理员操作-------------------------------------------
+
     /**
-     * 通过学生ID查询订单默认查询当天
-     *s学生ID从  sesson中获取
      * @param time
      * @return
      */
@@ -58,19 +67,15 @@ public class OrderController {
     public List<RepairsOrder> queryAllOrderByDate(@ApiParam(name = "查询日期",required = true) String time){
         List<RepairsOrder> repairsOrder = null ;
         try {
-                HttpSession session = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
-                        .getRequest().getSession();
-
                 String tody = "";
                 String tomorrow = "";
                 //前端日期数据由 String转Date
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                 Calendar calendar = Calendar.getInstance();
                 if(time!="" && time!=null){
-                    //传入时间就设置为当天时间
-                    Date date = sdf.parse(time);
-                    calendar.setTime(date);
-
+                //传入时间就设置为当天时间
+                Date date = sdf.parse(time);
+                calendar.setTime(date);
                 }else {//获取当天时间
                     calendar.setTime(calendar.getTime());
                 }
@@ -87,23 +92,104 @@ public class OrderController {
         return repairsOrder;
     }
 
+    @ApiOperation("订单派送")
+    @PostMapping(value ="/updateRepairsOrderBath" )
+    public Boolean updateRepairsOrderBath(@ApiParam(name = "订单ID",required = true)String orderId,
+                                          @ApiParam(name = "维修工ID",required = true)Integer workId){
+        Boolean flag = Boolean.FALSE;
+        try {
+            if(orderId!="" && orderId!=null  ){
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                Calendar calendar = Calendar.getInstance();
+                Date time = calendar.getTime();
+                String status= "1";
+                RepairsOrder repairsOrder = new RepairsOrder();
+                RepairsWork repairsWork = new RepairsWork();
+                repairsOrder.setOrderId(orderId);
+                repairsOrder.setOrderStatus(status);
+                repairsWork.setWorkId(workId);
+                repairsOrder.setRepairsWork(repairsWork);
+                repairsOrder.setOrderCompleteTime(time);
+                ArrayList<RepairsOrder> orderArrayList = new ArrayList<>();
+                orderArrayList.add(repairsOrder);
+                repairsOrderService.updateRepairsOrderBath(orderArrayList);
+                flag = Boolean.TRUE;
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return flag;
+    }
+
+
+    /**
+     * 修改订单状态  退单+退单理由   orderStatus = 3
+     * @param orderStatus
+     * @param orderId
+     * @param orderBack
+     * @return
+     */
+    @ApiOperation("订单退回")
+    @PostMapping(value = "/updateOrderBack")
+    public Boolean updateOrderBack( @ApiParam(name = "订单状态",required = true)String orderStatus,
+                                    @ApiParam(name = "订单ID",required = true)String orderId,
+                                    @ApiParam(name = "退回理由",required = true)String orderBack){
+        Boolean flag = Boolean.FALSE;
+        try{
+            RepairsWork repairsWork = new RepairsWork();
+            repairsWork.setWorkId(Integer.parseInt("1"));
+            RepairsOrder repairsOrder =new RepairsOrder(orderId,null,null,null,
+                    null,null,null,orderStatus,null,
+                    null,orderBack,null,repairsWork,null,null);
+            System.out.println(repairsOrder);
+            ArrayList<RepairsOrder> orderArrayList = new ArrayList<>();
+            orderArrayList.add(repairsOrder);
+            repairsOrderService.updateOrderStatus(orderArrayList);
+            flag = Boolean.TRUE;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return flag;
+    }
+
+//------------------------------------------- 移动端操作-------------------------------------------
     /**
      * 通过ID查询订单信息
-     * @param studentId
-     * @param workId
+     * @param
+     * @param
      * @param campus
      * @return
      */
-    @ApiOperation("移动端订单查询")
-    @PostMapping(value = "/queryAllOrderById")
-    public List<RepairsOrder> queryAllOrderById(@ApiParam(name = "学生学号(学生订单查询)")String studentId,
-                                                @ApiParam(name = "维修工编号(维修工订单查询)")String workId,
+    @ApiOperation("移动端学生订单查询")
+    @PostMapping(value = "/queryAllOrderByStudentId")
+    public List<RepairsOrder> queryAllOrderByStudentId(HttpServletRequest request,
                                                 @ApiParam(name = "校区",required = true)String campus){
         List<RepairsOrder> orderList = null;
         try{
+            String studentId = CreateTokenUtil.getHeadersInfo(request); //从请求头中获取  studentId
             if(studentId!="" && studentId!=null){
                 orderList = repairsOrderService.queryAllOrderById(studentId,null,campus);
             }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return orderList;
+    }
+
+    /**
+     * 通过ID查询订单信息
+     * @param
+     * @param
+     * @param campus
+     * @return
+     */
+    @ApiOperation("移动端维修工订单查询")
+    @PostMapping(value = "/queryAllOrderByWorkId")
+    public List<RepairsOrder> queryAllOrderByWorkId(HttpServletRequest request,
+                                                @ApiParam(name = "校区",required = true)String campus){
+        List<RepairsOrder> orderList = null;
+        try{
+            String workId = CreateTokenUtil.getHeadersInfo(request);
             if(workId!="" && workId!=null){
                 orderList = repairsOrderService.queryAllOrderById(null,workId,campus);
             }
@@ -114,6 +200,8 @@ public class OrderController {
 
         return orderList;
     }
+
+
     /**
      * 通过订单ID修改订单评价
      * @param orderId
@@ -138,7 +226,7 @@ public class OrderController {
     }
 
     /**
-     * 查询指定订单ID 的订单信息
+     * 查询指定订单ID 的订单信息    故障图片地址 http://binguo.vaiwan.com/images/1c843e19-6858-48a8-8c41-cbc80b5804ffperson.jpg
      * @param orderId
      * @return
      */
@@ -157,72 +245,63 @@ public class OrderController {
         return repairsOrder;
     }
 
-    @ApiOperation("订单派送")
-    @PostMapping(value ="/updateRepairsOrderBath" )
-    public Boolean updateRepairsOrderBath(@ApiParam(name = "订单ID",required = true)String orderId,
-                                          @ApiParam(name = "维修工ID",required = true)Integer workId){
-        Boolean flag = Boolean.FALSE;
-
-        try {
-            if(orderId!="" && orderId!=null  ){
-                String status= "1";
-                RepairsOrder repairsOrder = new RepairsOrder();
-                RepairsWork repairsWork = new RepairsWork();
-                repairsOrder.setOrderId(orderId);
-                repairsOrder.setOrderStatus(status);
-                repairsWork.setWorkId(workId);
-
-                repairsOrder.setRepairsWork(repairsWork);
-                ArrayList<RepairsOrder> orderArrayList = new ArrayList<>();
-                orderArrayList.add(repairsOrder);
-
-                repairsOrderService.updateRepairsOrderBath(orderArrayList);
-                flag = Boolean.TRUE;
-            }
 
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-        return flag;
-    }
-
-    @ApiOperation("订单填报")
+    @ApiOperation("学生:订单填报")
     @PostMapping(value ="/insertOrder" )
-    public Boolean insertOrder(@ApiParam(name = "故障类型",required = true)String orderType,
-                               @ApiParam(name = "故障图片",required = true)String orderImages,
+    public Boolean insertOrder(HttpServletRequest request,
+                               @ApiParam(name = "故障类型",required = true)String orderType,
                                @ApiParam(name = "订单备注",required = true)String orderNote,
                                @ApiParam(name = "维修期望时间",required = true)String orderExpectedTime,
-                               @ApiParam(name = "故障类型ID",required = true)Integer faultId){
+                               @ApiParam(name = "故障类型ID",required = true)Integer faultId,
+                               @ApiParam(name = "备选电话")String otherPhone,
+                               @ApiParam(name = "学生宿舍")String dormNumber,
+                               @ApiParam(name = "故障图片 orderImages",required = true) MultipartFile file){
         Boolean flag = Boolean.FALSE;
         try {
-
+            String cardNumber = CreateTokenUtil.getHeadersInfo(request);
+            RepairsStudent repairsStudent = new RepairsStudent();
+            repairsStudent.setStudentId(cardNumber);
+            repairsStudent.setDormNumber(dormNumber);
+            repairsStudent.setStudentOtherPhone(otherPhone);
+            ArrayList<RepairsStudent> repairsStudentList = new ArrayList<>();
+            repairsStudentList.add(repairsStudent);
+            repairsStudentService.updateStudent(repairsStudentList);
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             //处理当前时间为时间戳格式
             Calendar calendar = Calendar.getInstance();
             String orderTime = sdf.format(calendar.getTime());
             Date date = sdf.parse(orderTime);
-
             long ts = date.getTime();
             String orderId="D";
             orderId += String.valueOf(ts);
-            //设置默认参数
-
-            //后期在session中获取学生学号
-            RepairsStudent repairsStudent = new RepairsStudent();
-
-
             RepairsWork repairsWork = null;
+            RepairsOrder repairsOrder = new RepairsOrder();
             RepairsFault repairsFault = new RepairsFault(faultId,null,null,null,orderType);
-
-
-            RepairsOrder repairsOrder = new RepairsOrder(orderId,orderImages,orderNote,orderExpectedTime,
-                    null,date,null,"0",null,"0",
-                    null,repairsStudent,repairsWork,repairsFault,orderType);
-
-                repairsOrderService.insertOrder(repairsOrder);
-                flag = Boolean.TRUE;
-
-
+            //获取原始图片的拓展名
+            String originalFilename = file.getOriginalFilename();
+            int index=originalFilename.lastIndexOf('.')+1;//获取地址.的前面的数字,从0开始
+            String type=originalFilename.substring(index);//从地址.开始截取后缀
+            String orderImages=repairsOrder.getOrderImages();
+            //保存图片的路径(这是存在我项目中的images下了,你们可以设置路径)
+           // String filePath="E:\\springboot\\src\\main\\resources\\static\\images";
+            String filePath="C:\\Users\\Administrator\\Desktop\\学校报修系统\\code\\repair_reporting_system_api\\src\\main\\resources\\static\\images";
+            //生成新文件名字
+            String newFileName= UUID.randomUUID()+originalFilename;
+            // 封装上传文件位置的全路径
+            File targetFile  = new File(filePath,newFileName);
+            //把本地文件上传到封装上传文件位置的全路径
+            file.transferTo(targetFile);
+            repairsOrder.setOrderImages(newFileName);
+            if(type.equals("jpg") || type.equals("gif")){
+                if(newFileName!=null && newFileName!=""){
+                    //prodectService.addProdect(prodect);
+                    repairsOrder = new RepairsOrder(orderId,newFileName,orderNote,orderExpectedTime,
+                            null,date,null,"0",null,"0",
+                            null,repairsStudent,repairsWork,repairsFault,orderType);
+                    repairsOrderService.insertOrder(repairsOrder);
+                    flag = Boolean.TRUE;
+                }
+            }
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -231,22 +310,22 @@ public class OrderController {
 
     /**
      * 修改订单状态  已完成 orderStatus = 2
-     * @param orderStatus
+     * @param
      * @param orderId
      * @return
      */
-    @ApiOperation("订单已完成")
+    @ApiOperation("维修工:订单已完成")
     @PostMapping(value = "/updateOrderFinish")
-    public Boolean updateOrderFinish(@ApiParam(name = "订单状态",required = true)String orderStatus,
+    public Boolean updateOrderFinish(HttpServletRequest request,
                                      @ApiParam(name = "订单ID",required = true)String orderId){
         Boolean flag = Boolean.FALSE;
         try{
             RepairsWork repairsWork = new RepairsWork();
-            repairsWork.setWorkId(Integer.parseInt("1"));
+            String workId = CreateTokenUtil.getHeadersInfo(request);
+            repairsWork.setWorkId(Integer.parseInt(workId));
             RepairsOrder repairsOrder =new RepairsOrder(orderId,null,null,null,
-                    null,null,null,orderStatus,null,
+                    null,null,null,"2",null,
                     null,null,null,repairsWork,null,null);
-            System.out.println(repairsOrder);
             ArrayList<RepairsOrder> orderArrayList = new ArrayList<>();
             orderArrayList.add(repairsOrder);
             repairsOrderService.updateOrderStatus(orderArrayList);
@@ -257,53 +336,22 @@ public class OrderController {
         return flag;
     }
 
-    /**
-     * 修改订单状态  退单+退单理由   orderStatus = 3
-     * @param orderStatus
-     * @param orderId
-     * @param orderBack
-     * @return
-     */
-    @ApiOperation("订单退回")
-    @PostMapping(value = "/updateOrderBack")
-    public Boolean updateOrderBack( @ApiParam(name = "订单状态",required = true)String orderStatus,
-                                    @ApiParam(name = "订单ID",required = true)String orderId,
-                                    @ApiParam(name = "退回理由",required = true)String orderBack){
-        Boolean flag = Boolean.FALSE;
-        try{
-            RepairsWork repairsWork = new RepairsWork();
-            repairsWork.setWorkId(Integer.parseInt("1"));
-            RepairsOrder repairsOrder =new RepairsOrder(orderId,null,null,null,
-                    null,null,null,orderStatus,null,
-                    null,orderBack,null,repairsWork,null,null);
-            System.out.println(repairsOrder);
-            ArrayList<RepairsOrder> orderArrayList = new ArrayList<>();
-            orderArrayList.add(repairsOrder);
-            repairsOrderService.updateOrderStatus(orderArrayList);
-            flag = Boolean.TRUE;
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-        return flag;
-    }
 
     /**
      * 修改订单状态  维修工拒绝订单   orderStatus = 0
-     * @param orderStatus
+     * @param
      * @param orderId
      * @param
      * @return
      */
-    @ApiOperation("订单拒绝")
+    @ApiOperation("维修工:订单拒绝")
     @PostMapping(value = "/updateOrderRefused")
-    public Boolean updateOrderRefused( @ApiParam(name = "订单状态",required = true)String orderStatus,
-                                    @ApiParam(name = "订单ID",required = true)String orderId){
+    public Boolean updateOrderRefused(@ApiParam(name = "订单ID",required = true)String orderId){
         Boolean flag = Boolean.FALSE;
         try{
             RepairsOrder repairsOrder =new RepairsOrder(orderId,null,null,null,
-                    null,null,null,orderStatus,null,
+                    null,null,null,"2",null,
                     null,null,null,null,null,null);
-            System.out.println(repairsOrder);
             ArrayList<RepairsOrder> orderArrayList = new ArrayList<>();
             orderArrayList.add(repairsOrder);
             repairsOrderService.updateOrderStatus(orderArrayList);
@@ -313,4 +361,6 @@ public class OrderController {
         }
         return flag;
     }
+
+
 }

+ 7 - 0
src/main/java/com/chuanghai/repair/entity/RepairsAdmin.java

@@ -4,6 +4,9 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 
 import javax.persistence.*;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
 
 @NoArgsConstructor
 @AllArgsConstructor
@@ -16,6 +19,7 @@ public class RepairsAdmin {
     /**
      * 管理员ID
      */
+    @NotEmpty
     @ApiModelProperty(value = "管理员ID")
     @Id
     @Column(name = "admin_id")
@@ -24,6 +28,7 @@ public class RepairsAdmin {
     /**
      * 管理员名称
      */
+    @NotNull
     @ApiModelProperty(value = "管理员名称")
     @Column(name = "admin_name")
     private String adminName;
@@ -31,6 +36,7 @@ public class RepairsAdmin {
     /**
      * 管理员密码
      */
+    @NotEmpty
     @ApiModelProperty(value = "管理员密码")
     @Column(name = "admin_password")
     private String adminPassword;
@@ -38,6 +44,7 @@ public class RepairsAdmin {
     /**
      * 手机号码
      */
+    @Pattern(regexp = "\\d{11}",message = "必须为数字,并且长度为11")
     @ApiModelProperty(value = "管理员手机号码")
     @Column(name = "admin_phone")
     private String adminPhone;

+ 6 - 1
src/main/java/com/chuanghai/repair/entity/RepairsWork.java

@@ -4,7 +4,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 
 import javax.persistence.*;
-
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Pattern;
 
 
 @NoArgsConstructor
@@ -17,6 +18,7 @@ public class RepairsWork {
     /**
      * 维修工ID
      */
+    @NotEmpty
     @ApiModelProperty(value = "维修工ID")
     @Id
     @Column(name = "work_id")
@@ -25,6 +27,7 @@ public class RepairsWork {
     /**
      * 维修工名称
      */
+    @NotEmpty
     @ApiModelProperty(value = "维修工名称")
     @Column(name = "work_name")
     private String workName;
@@ -32,6 +35,7 @@ public class RepairsWork {
     /**
      * 维修工密码
      */
+    @NotEmpty
     @ApiModelProperty(value = "维修工密码")
     @Column(name = "work_password")
     private String workPassword;
@@ -39,6 +43,7 @@ public class RepairsWork {
     /**
      * 维修工手机号码
      */
+    @Pattern(regexp = "\\d{11}",message = "必须为数字,并且长度为11")
     @ApiModelProperty(value = "维修工手机号码")
     @Column(name = "work_phone")
     private String workPhone;

+ 8 - 0
src/main/java/com/chuanghai/repair/mapper/RepairsOrderMapper.java

@@ -81,4 +81,12 @@ public interface RepairsOrderMapper  {
      */
     void updateOrderStatus(List<RepairsOrder> orderList);
 
+    /**
+     * 查询与系统时间相差半小时的订单编号
+     * @param systemTime
+     * @param changeTime
+     * @return
+     */
+    List<RepairsOrder> queryByTime(String systemTime,String changeTime);
+
 }

+ 9 - 0
src/main/java/com/chuanghai/repair/mapper/RepairsStudentMapper.java

@@ -3,6 +3,8 @@ package com.chuanghai.repair.mapper;
 import com.chuanghai.repair.entity.RepairsStudent;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 @Mapper
 public interface RepairsStudentMapper {
     /**
@@ -17,4 +19,11 @@ public interface RepairsStudentMapper {
      * @return
      */
     RepairsStudent queryByStudentId(String studentId);
+
+    /**
+     * 更新学生信息
+     * @param
+     * @param repairsStudent
+     */
+    void updateStudent(List<RepairsStudent> repairsStudent);
 }

+ 9 - 0
src/main/java/com/chuanghai/repair/service/RepairsOrderService.java

@@ -88,4 +88,13 @@ public interface RepairsOrderService {
      * @param
      */
     void updateOrderStatus(List<RepairsOrder> orderList)throws Exception;
+
+
+    /**
+     * 查询与系统时间相差半小时的订单编号
+     * @param systemTime
+     * @param changeTime
+     * @return
+     */
+    List<RepairsOrder> queryByTime(String systemTime,String changeTime)throws Exception;
 }

+ 9 - 0
src/main/java/com/chuanghai/repair/service/RepairsStudentService.java

@@ -2,6 +2,8 @@ package com.chuanghai.repair.service;
 
 import com.chuanghai.repair.entity.RepairsStudent;
 
+import java.util.List;
+
 /**
  * @Author: bingo
  * @Date: 2022/2/23 星期三 17:30
@@ -22,4 +24,11 @@ public interface RepairsStudentService {
      * @return
      */
     RepairsStudent queryByStudentId(String studentId)throws Exception;
+
+    /**
+     * 更新学生信息
+     * @param
+     * @param
+     */
+    void updateStudent(List<RepairsStudent> repairsStudent)throws Exception;
 }

+ 11 - 0
src/main/java/com/chuanghai/repair/service/ServiceImpl/RepairsOrderServiceImpl.java

@@ -117,4 +117,15 @@ public class RepairsOrderServiceImpl implements RepairsOrderService {
    public void updateOrderStatus(List<RepairsOrder> orderList)throws Exception{
         repairsOrderMapper.updateOrderStatus(orderList);
     }
+
+
+    /**
+     * 查询与系统时间相差半小时的订单编号
+     * @param systemTime
+     * @param changeTime
+     * @return
+     */
+   public List<RepairsOrder> queryByTime(String systemTime,String changeTime)throws Exception {
+       return repairsOrderMapper.queryByTime(systemTime,changeTime);
+   }
 }

+ 13 - 0
src/main/java/com/chuanghai/repair/service/ServiceImpl/RepairsStudentServiceImpl.java

@@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * @Author: bingo
@@ -38,4 +39,16 @@ public class RepairsStudentServiceImpl implements RepairsStudentService {
     public RepairsStudent queryByStudentId(String studentId)throws Exception{
         return repairsStudentMapper.queryByStudentId(studentId);
     }
+
+
+    /**
+     *  更新学生信息
+     * @param
+     * @param
+     * @throws Exception
+     */
+    @Override
+    public void updateStudent(List<RepairsStudent> repairsStudent) throws Exception {
+        repairsStudentMapper.updateStudent(repairsStudent);
+    }
 }

+ 228 - 2
src/main/java/com/chuanghai/repair/utils/CreateTokenUtil.java

@@ -1,11 +1,25 @@
 package com.chuanghai.repair.utils;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.auth0.jwt.JWT;
 import com.auth0.jwt.JWTVerifier;
 import com.auth0.jwt.algorithms.Algorithm;
 import com.auth0.jwt.interfaces.DecodedJWT;
+import com.sun.deploy.net.URLEncoder;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
 
+import javax.servlet.http.HttpServletRequest;
+import java.net.URI;
 import java.util.Date;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -15,6 +29,7 @@ import java.util.Map;
  * @Description: com.chuanghai.repair.utils
  * @version: 1.0
  */
+@Slf4j
 public class CreateTokenUtil {
 
     //设置过期时间
@@ -22,8 +37,12 @@ public class CreateTokenUtil {
     //token秘钥
     private static final String TOKEN_SECRET = "ZCfasfhuaUUHufguGuwu2020BQWE";
 
+    /**
+     * 数据加密生成token
+     * @param userId
+     * @return
+     */
     public static String getToken (String userId){
-
         String token = "";
         try {
             //过期时间
@@ -47,12 +66,219 @@ public class CreateTokenUtil {
         return token;
     }
 
-
+    /**
+     * 解析token
+     * @param token
+     * @param userId
+     * @return
+     */
 
     public static String verify(String token,String userId) {
         return JWT.decode(token).getClaim(userId).asString();
     }
 
+
+    /**
+     * 微校小程序H5页面  通过 wxcode 获取 access_token
+     * 访问链接:https://open.wecard.qq.com/connect/oauth/authorize?app_key=EE28EE2C93296F4E&response_type=code
+     *          &scope=snsapi_base&ocode=1015730314&redirect_uri=http://binguo.vaiwan.com/login/getCardNumber&state=STATE
+     * @param wxcode
+     * @param state
+     * @return
+     */
+    public static String getAccessToken(String wxcode,String state) {
+        String access_token = "";
+        System.out.println("before");
+        try {
+
+            wxcode = "wxcode=" + wxcode + "&";
+            String app_key = "app_key=EE28EE2C93296F4E&";
+            String app_secret = "app_secret=5071958561AA629530AAA31503088330&";
+            String grant_type = "grant_type=authorization_code&";
+            String redirect_uri = "redirect_uri=http://binguo.vaiwan.com/login/getCardNumber";
+            String url = "https://open.wecard.qq.com/connect/oauth2/token?";
+            String accessTokenUrl = url + wxcode + app_key + app_secret + grant_type + redirect_uri;
+            // -------------------------------> 获取Rest客户端实例
+            RestTemplate restTemplate = new RestTemplate();
+            // -------------------------------> (选择性设置)请求头信息
+            // HttpHeaders实现了MultiValueMap接口
+            HttpHeaders httpHeaders = new HttpHeaders();
+            // 设置contentType
+            // httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
+            httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+            // 给请求header中添加一些数据
+            // ------------------------------->将请求头、请求体数据,放入HttpEntity中
+            // 请求体的类型任选即可;只要保证 请求体 的类型与HttpEntity类的泛型保持一致即可
+            Map<String, Object> paramMap = new HashMap<>();
+            HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(paramMap, httpHeaders);
+            StringBuffer paramsURL = new StringBuffer(accessTokenUrl);
+            // 字符数据最好encoding一下;这样一来,某些特殊字符才能传过去(如:flag的参数值就是“&”,不encoding的话,传不过去)
+            // paramsURL.append("?flag=" + URLEncoder.encode("&&", "utf-8"));
+            URI uri = URI.create(paramsURL.toString());
+            //  -------------------------------> 执行请求并返回结果
+            // 此处的泛型  对应 响应体数据   类型;即:这里指定响应体的数据装配为String
+            ResponseEntity<String> response = restTemplate.postForEntity(uri, httpEntity, String.class);
+            JSONObject objParam = JSON.parseObject(response.getBody());
+            for (Map.Entry<String, Object> entry : objParam.entrySet()) {
+                Object o = entry.getValue();
+                if (o instanceof String) {
+                    if (entry.getKey().equals("access_token")) {
+                        access_token = (String) entry.getValue();
+                        System.out.println(access_token+"util ");
+                    }
+                }
+            }
+//            String app_key = "EE28EE2C93296F4E";
+//            String app_secret = "5071958561AA629530AAA31503088330";
+//            String grant_type = "authorization_code";
+//            String redirect_uri = "http://binguo.vaiwan.com/login/getAccessToken";
+//            String url = "https://open.wecard.qq.com/connect/oauth2/token";
+//            JSONObject accessTokenUrl = new JSONObject();
+//            accessTokenUrl.put("wxcode",wxcode);
+//            accessTokenUrl.put("app_key",app_key);
+//            accessTokenUrl.put("app_secret",app_secret);
+//            accessTokenUrl.put("grant_type",grant_type);
+//            accessTokenUrl.put("redirect_uri",redirect_uri);
+//            String urlToken = accessTokenUrl.toString();
+//            urlToken = urlToken.replace("\"", "%22")
+//                    .replace("{", "%7b").replace("}", "%7d");
+//            StringBuffer paramsURL = new StringBuffer(url);
+//            // 字符数据最好encoding一下;这样一来,某些特殊字符才能传过去(如:flag的参数值就是“&”,不encoding的话,传不过去)
+//            paramsURL.append("?flag=" + URLEncoder.encode("&&", "utf-8"));
+//            URI uri = URI.create(paramsURL.toString());
+//            // -------------------------------> 获取Rest客户端实例
+//            RestTemplate restTemplate = new RestTemplate();
+//            HttpHeaders headers = new HttpHeaders();
+//            headers.setContentType(MediaType.APPLICATION_JSON);
+//            HttpEntity<String> request = new HttpEntity< String>(urlToken, headers);
+//            ResponseEntity<String> responseEntity = restTemplate.postForEntity(uri, request, String.class);
+//            JSONObject objParam = JSON.parseObject(responseEntity.getBody());
+//            for (Map.Entry<String, Object> entry : objParam.entrySet()) {
+//                Object o = entry.getValue();
+//                if (o instanceof String) {
+//                    if (entry.getKey().equals("access_token")) {
+//                        access_token = (String) entry.getValue();
+//                    }
+//                }
+//            }
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return access_token;
+    }
+
+    /**
+     * 微校小程序H5页面  通过 access_token 获取 用户信息
+     * @param access_token
+     * @return
+     */
+    public static JSONObject getUserInfoJSON(String access_token){
+        JSONObject userInfoJSON = null;
+        try{
+            String url = "https://open.wecard.qq.com/connect/oauth/get-user-info";
+            JSONObject accessTokenUrl = new JSONObject();
+            accessTokenUrl.put("access_token",access_token);
+            String urlToken = accessTokenUrl.toString();
+            urlToken = urlToken.replace("\"", "%22")
+                    .replace("{", "%7b").replace("}", "%7d");
+            StringBuffer paramsURL = new StringBuffer(url);
+            // 字符数据最好encoding一下;这样一来,某些特殊字符才能传过去(如:flag的参数值就是“&”,不encoding的话,传不过去)
+            paramsURL.append("?flag=" + URLEncoder.encode("&&", "utf-8"));
+            URI uri = URI.create(paramsURL.toString());
+            // -------------------------------> 获取Rest客户端实例
+            RestTemplate restTemplate = new RestTemplate();
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+            HttpEntity<String> request = new HttpEntity< String>(urlToken, headers);
+            ResponseEntity<String> responseEntity = restTemplate.postForEntity(uri, request, String.class);
+            userInfoJSON = JSON.parseObject(responseEntity.getBody());
+            for (Map.Entry<String, Object> entry : userInfoJSON.entrySet()) {
+                Object o = entry.getValue();
+                if (o instanceof String) {
+                       System.out.println("key:"+entry.getKey()+":"+"value:"+entry.getValue());
+                }
+            }
+//            RestTemplate restTemplate = new RestTemplate();
+//            MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
+//            map.add("shopid","1");
+//            HttpHeaders headers = new HttpHeaders();
+//            headers.setContentType(MediaType.APPLICATION_JSON);
+//            HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
+//            String userInfoUrl = "https://open.wecard.qq.com/connect/oauth/get-user-info?access_token=" + access_token + "&scope=snsapi_base";
+//            StringBuffer userInfoURl = new StringBuffer(userInfoUrl);
+//            URI urm = URI.create(userInfoURl.toString());
+//            ResponseEntity<String> responseEntity = restTemplate.postForEntity(urm, request, String.class);
+//            userInfoJSON = JSON.parseObject(responseEntity.getBody());
+//            for (Map.Entry<String, Object> entry : userInfoJSON.entrySet()) {
+//                Object o = entry.getValue();
+//                if (o instanceof String) {
+//                       System.out.println("key:"+entry.getKey()+":"+"value:"+entry.getValue());
+//                }
+//            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+        return userInfoJSON;
+    }
+
+    /**
+     * 微校小程序H5页面  通过 access_token 获取 用户信息
+     * @param url
+     * @return
+     */
+    public static JSONObject sendNotice(String url){
+        JSONObject userInfoJSON = null;
+        try{
+            RestTemplate restTemplate = new RestTemplate();
+            MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
+            map.add("shopid","1");
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+            HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
+            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+
+
+            userInfoJSON = JSON.parseObject(responseEntity.getBody());
+
+
+//            StringBuffer unoticeURl = new StringBuffer(url);
+//            URI urm = URI.create(unoticeURl.toString());
+//            ResponseEntity<String> responsem = restTemplate.postForEntity(urm, httpEntity, String.class);
+//            userInfoJSON = JSON.parseObject(responsem.getBody());
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+        return userInfoJSON;
+    }
+
+    /**
+     * 获取请求头中的数据
+     * @param request
+     * @param
+     * @return
+     */
+    public static String getHeadersInfo(HttpServletRequest request) {
+        String access_token = "";
+        Map<String, String> map = new HashMap<String, String>();
+        Enumeration headerNames = request.getHeaderNames();
+        while (headerNames.hasMoreElements()) {
+            String key = (String) headerNames.nextElement();
+            String value = request.getHeader(key);
+            map.put(key, value);
+        }
+        for (Map.Entry<String, String> entry:map.entrySet()) {
+            if(entry.getKey().equals("access_token")){
+                access_token = entry.getValue();
+            }
+        }
+        return access_token;
+    }
+
+
+
     public static void main(String[] args) {
         String id ="1003";
         String userId = "userId";

+ 60 - 0
src/main/java/com/chuanghai/repair/utils/FileUtil.java

@@ -0,0 +1,60 @@
+package com.chuanghai.repair.utils;
+
+import com.chuanghai.repair.entity.RepairsOrder;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.security.core.token.TokenService;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.UUID;
+
+/**
+ * @Author: bingo
+ * @Date: 2022/3/2 星期三 20:01
+ * @Description: com.chuanghai.repair.utils
+ * @version: 1.0
+ */
+public class FileUtil {
+
+    public static String upLoadFile(MultipartFile file,String imageUrl){
+        String newFileName = "";
+        try {
+            //获取原始图片的拓展名
+            String originalFilename = file.getOriginalFilename();
+            int index=originalFilename.lastIndexOf('.')+1;//获取地址.的前面的数字,从0开始
+            String type=originalFilename.substring(index);//从地址.开始截取后缀
+            if(type.equals("jpg") || type.equals("gif")){  //判断传的图片格式
+                // String orderImages=repairsOrder.getOrderImages();      获取实体对象的存图片字段
+                //保存图片的路径(这是存在我项目中的images下了,你们可以设置路径)
+                // String filePath="E:\\springboot\\src\\main\\resources\\static\\images";
+                String filePath=imageUrl;
+                //生成新文件名字
+                newFileName= UUID.randomUUID()+originalFilename;
+                // 封装上传文件位置的全路径
+                File targetFile  = new File(filePath,newFileName);
+                //把本地文件上传到封装上传文件位置的全路径
+                file.transferTo(targetFile);
+                // repairsOrder.setOrderImages(newFileName);   将转换好的图片名字赋给实体对象
+
+                if(newFileName!=null && newFileName!=""){
+                    return newFileName;
+                }
+
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return newFileName;
+    }
+
+
+
+
+}

+ 150 - 0
src/main/java/com/chuanghai/repair/utils/ReturnValueUtil.java

@@ -0,0 +1,150 @@
+package com.chuanghai.repair.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+
+
+/**
+ * @Author: bingo
+ * @Date: 2022/3/3 星期四 14:22
+ * @Description: 定义通用得方法返回值及状态码
+ * @version: 1.0
+ *
+ */
+@ApiModel(value = "返回信息", description = "返回响应信息")
+public class ReturnValueUtil {
+    public static final String STATUS_FAIL = "500";
+    public static final String STATUS_OK = "200";
+    public static final String MESSAGE_SUCCESS = "操作成功";
+    public static final String MESSAGE_ERROR = "操作失敗";
+    public static final String ERRCODE_NOERR = "0000";
+    public static final String ERRCODE_ERR = "9999";
+
+    @ApiModelProperty(value = "返回数据", name = "data", example = "")
+    @Setter
+    @Getter
+    private Object data;
+    //未配置简易流程
+    public static final String ERR_SIMPLE_PROCESS = "0001";
+    //子目录与主目录的基本编码不匹配
+    public static final String ERR_BASIC_CODE = "0002";
+    @ApiModelProperty(value = "操作成功或失败标志", name = "status", example = "200")
+    protected String status = STATUS_OK;
+    @ApiModelProperty(value = "操作错误代码", name = "errcode", example = "5399")
+    protected String errcode = "";
+    @ApiModelProperty(value = "操作状态信息", name = "message", example = "操作成功")
+    protected String message = MESSAGE_SUCCESS;
+    @ApiModelProperty(value = "错误信息", name = "errmsg", example = "上送数据错误")
+    protected String errmsg = "";
+
+    public ReturnValueUtil(String status, String message) {
+        this.status = status;
+        this.message = message;
+    }
+
+    public ReturnValueUtil() {
+    }
+
+    public ReturnValueUtil(String status, String message, JSONObject data, String errcode, String errmsg) {
+        this.setData(data);
+        this.status = status;
+        this.message = message;
+    }
+
+    public String getErrmsg() {
+        return errmsg;
+    }
+
+    public ReturnValueUtil setErrmsg(String errmsg) {
+        this.errmsg = errmsg;
+        return this;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public ReturnValueUtil setMessage(String message) {
+        this.message = message;
+        return this;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public ReturnValueUtil setStatus(String status) {
+        this.status = status;
+        return this;
+    }
+
+    /**
+     * description: 返回成功报文无需返回业务数据
+     */
+    public static ReturnValueUtil ok() {
+        ReturnValueUtil ReturnValueUtil = new ReturnValueUtil();
+        ReturnValueUtil.setData(new JSONObject());
+        ReturnValueUtil.errcode = ERRCODE_NOERR;
+        return ReturnValueUtil;
+    }
+
+    /**
+     * description: 返回成功报文包含返回数据
+     */
+    public static ReturnValueUtil ok(Object data) {
+        ReturnValueUtil response = new ReturnValueUtil();
+        response.setStatus(STATUS_OK);
+        response.setMessage(MESSAGE_SUCCESS);
+        response.setData(data);
+        response.setErrmsg("");
+        response.setErrcode(ERRCODE_NOERR);
+        return response;
+    }
+
+
+    /**
+     * description: 返回成功报文包含返回数据,自定义返回错误信息和错误码
+     */
+    public static ReturnValueUtil ok(Object data, String errMsg, String errCode) {
+        ReturnValueUtil response = new ReturnValueUtil();
+        response.setStatus(STATUS_OK);
+        response.setMessage(MESSAGE_SUCCESS);
+        response.setData(data);
+        response.setErrmsg(errMsg);
+        response.setErrcode(errCode);
+        return response;
+    }
+
+    /**
+     * description: 返回失败报文,自定义错误信息
+     */
+    public static ReturnValueUtil fail(String errmsg) {
+        return fail(errmsg, ERRCODE_ERR);
+    }
+
+    /**
+     * description:返回失败报文,自定义错误代码和错误信息
+     */
+    public static ReturnValueUtil fail(String errmsg, String errcode) {
+        ReturnValueUtil response = new ReturnValueUtil();
+        response.setStatus(STATUS_FAIL);
+        response.setMessage(MESSAGE_ERROR);
+        response.setData(new JSONObject());
+        response.setErrmsg(errmsg);
+        response.setErrcode(errcode);
+        return response;
+    }
+
+    public String getErrcode() {
+        return errcode;
+    }
+
+    public ReturnValueUtil setErrcode(String errcode) {
+        this.errcode = errcode;
+        return this;
+    }
+}

+ 5 - 0
src/main/resources/application.yml

@@ -15,7 +15,12 @@ spring:
   jpa:
     database-platform: org.hibernate.dialect.MySQLDialect
 
+
 #mybatis配置
 mybatis:
   mapper-locations: classpath:mapper/**/*.xml
 
+
+
+
+

+ 19 - 0
src/main/resources/mapper/RepairsOrderMapper.xml

@@ -130,6 +130,11 @@
                     when order_id = #{item.orderId} then #{item.repairsWork.workId}
                 </foreach>
             </trim>
+            <trim prefix="order_complete_time=case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when order_id = #{item.orderId} then #{item.orderCompleteTime}
+                </foreach>
+            </trim>
         </trim>
         where order_id in
         <foreach collection="list" index="index" item="item"
@@ -194,4 +199,18 @@
         </foreach>
     </update>
 
+    <resultMap id="orderTimeMap" type="com.chuanghai.repair.entity.RepairsOrder">
+        <id column="order_id" property="orderId" jdbcType="VARCHAR"/>
+        <!--        订单与学生之间是  N:1 关系-->
+        <association  property="repairsStudent"  javaType="com.chuanghai.repair.entity.RepairsStudent">
+            <id column="student_id" property="studentId"></id>
+        </association >
+    </resultMap>
+
+<!--    查询与系统时间相差半小时的订单编号-->
+    <select id="queryByTime" parameterType="java.lang.String" resultMap="orderTimeMap">
+        select st.student_id from repairs_order od,repairs_student st
+        where od.student_id = st.student_id
+        and od.order_complete_time BETWEEN #{systemTime}  AND #{changeTime}
+    </select>
 </mapper>

+ 21 - 0
src/main/resources/mapper/RepairsStudentMapper.xml

@@ -27,4 +27,25 @@
     <select id="queryByStudentId" parameterType="java.lang.String" resultMap="BaseResultMap">
         select * from  repairs_student where student_id = #{studentId}
     </select>
+<!--    更新学生信息-->
+    <update id="updateStudent" parameterType="java.util.List" >
+        update repairs_student
+        <trim prefix="set" suffixOverrides=",">
+            <trim prefix="student_other_phone=case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when student_id = #{item.studentId} then #{item.studentOtherPhone}
+                </foreach>
+            </trim>
+            <trim prefix="dorm_number=case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when student_id = #{item.studentId} then #{item.dormNumber}
+                </foreach>
+            </trim>
+        </trim>
+        where student_id in
+        <foreach collection="list" index="index" item="item"
+                 separator="," open="(" close=")">
+            #{item.studentId,jdbcType=VARCHAR}
+        </foreach>
+    </update>
 </mapper>

BIN
src/main/resources/static/images/6b7a6d25-c1e0-433a-b935-18bfecb24ec8person.jpg


+ 8 - 0
src/test/java/com/chuanghai/RepairsApplicationTests.java

@@ -1,9 +1,16 @@
 package com.chuanghai;
 
+import com.chuanghai.repair.entity.RepairsOrder;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.UUID;
 
 @SpringBootTest
 class RepairsApplicationTests {
@@ -15,4 +22,5 @@ class RepairsApplicationTests {
 
     }
 
+
 }