刘一凡 преди 3 години
родител
ревизия
dfa04050cd

+ 8 - 0
src/main/java/com/chuanghai/repair/config/WeixiaoConfig.java

@@ -35,11 +35,19 @@ public class WeixiaoConfig {
      */
     private String title;
 
+    private String errTitle;
+
+    private String workTitle;
+
     /**
      * 微校通知的内容
      */
     private String content;
 
+    private String errContent;
+
+    private String workContent;
+
     /**
      * 微校通知发起单位
      */

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

@@ -9,12 +9,14 @@ import com.chuanghai.repair.service.RepairsWorkService;
 import com.chuanghai.repair.service.ServiceImpl.CacheManagerImpl;
 import com.chuanghai.repair.utils.CreateTokenUtil;
 import org.springframework.context.ApplicationListener;
+import org.springframework.context.annotation.Configuration;
 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.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.client.RestTemplate;
@@ -34,8 +36,8 @@ import java.util.stream.Collectors;
  * 重写了onApplicationEvent方法,使项目启动之后自动执行该方法 实现订单自动分配
  */
 
-
-@RestController
+@Controller
+//@RestController
 @RequestMapping("/auto")
 //public class AutoSendOrderCentroller implements ApplicationListener<ContextRefreshedEvent> {
 public class AutoSendOrderCentroller {
@@ -103,4 +105,73 @@ public class AutoSendOrderCentroller {
         }
     }
 
+
+
+    /**
+     * 30分钟查询一次已接订单的完成时间,30分钟发送通知一次
+     */
+    @Scheduled(cron = "0 0/30 * * * ?") //    0 0/30 * * * ?    30分钟调用一次
+    public void autoQueryOrders(){
+        String accessTokenGlobal = new CreateTokenUtil().getAccessTokenGlobalA(weixiaoConfig.getAppKey(),weixiaoConfig.getAppSecret(),weixiaoConfig.getOcode(),weixiaoConfig.getServerUrl());
+//        CacheManagerImpl cacheManagerImpl = new CacheManagerImpl();
+//        CacheListener cacheListener = new CacheListener(cacheManagerImpl);
+//        cacheManagerImpl.putCache("cache_token", accessTokenGlobal, 2*3610 * 1000L); //access_token 在2*3600*1000L 过期
+//        cacheListener.startListen();
+        try {
+            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());
+            //每30分钟查询一次数据库,收集订单集合
+            List<RepairsOrder> orderList = repairsOrderService.queryByTimes(systemTime, changeTime);
+
+            String idList = orderList.stream().filter(e -> e.getRepairsStudent() != null)
+                    .map(e -> e.getRepairsStudent().getStudentId()).collect(Collectors.toSet()).toString();
+//            String access_token = new CacheManagerImpl().getCacheByKey("cache_token").getDatas().toString();
+
+            Map<String, String> param = new HashMap<>();
+            param.put("title", weixiaoConfig.getErrTitle());
+            param.put("cards", idList);
+            param.put("content", weixiaoConfig.getErrContent());
+            param.put("sender", weixiaoConfig.getSender());
+            String url = "https://open.wecard.qq.com/cgi-bin/notice/send?access_token=" + accessTokenGlobal;
+
+            RestTemplate restTemplate = new RestTemplate();
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_JSON);
+            HttpEntity<Map<String, String>> request = new HttpEntity<>(param, headers);
+            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public void autoQueryOrderByWork(String card){
+        String accessTokenGlobal = new CreateTokenUtil().getAccessTokenGlobalA(weixiaoConfig.getAppKey(),weixiaoConfig.getAppSecret(),weixiaoConfig.getOcode(),weixiaoConfig.getServerUrl());
+        try {
+
+            Map<String, String> param = new HashMap<>();
+            List<String> cards = new ArrayList<>();
+            cards.add(card);
+            System.out.println(cards);
+            param.put("title", weixiaoConfig.getWorkTitle());
+            param.put("cards", String.valueOf(cards));
+            param.put("content", weixiaoConfig.getWorkContent());
+            param.put("sender", weixiaoConfig.getSender());
+            String url = "https://open.wecard.qq.com/cgi-bin/notice/send?access_token=" + accessTokenGlobal;
+
+            RestTemplate restTemplate = new RestTemplate();
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_JSON);
+            HttpEntity<Map<String, String>> request = new HttpEntity<>(param, headers);
+            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
 }

+ 17 - 7
src/main/java/com/chuanghai/repair/controller/OrderController.java

@@ -56,6 +56,8 @@ import java.text.SimpleDateFormat;
 @RequestMapping("/order")
 public class OrderController {
 
+    private AutoSendOrderCentroller autoSendOrderCentroller;
+
     @Resource(name = "repairsOrderService")
     private RepairsOrderService repairsOrderService;
 
@@ -212,6 +214,10 @@ public class OrderController {
                 ArrayList<RepairsOrder> orderArrayList = new ArrayList<>();
                 orderArrayList.add(repairsOrder);
                 repairsOrderService.updateRepairsOrderBath(orderArrayList);
+                System.out.println("workId ====>>>>  " + workId);
+                String card = repairsWorkService.queryByCardNumber(workId);
+                System.out.println("cardNumber ====>>>>  " + card);
+//                autoSendOrderCentroller.autoQueryOrderByWork(card);
                 flag = Boolean.TRUE;
             } else {
                 flag = Boolean.FALSE;
@@ -488,7 +494,7 @@ public class OrderController {
             RepairsFault repairsFault = new RepairsFault(Integer.parseInt(faultId), null, null, null, null);
             RepairsOrder repairsOrder = new RepairsOrder(orderId, orderImages, orderNote, orderExpectedTime,
                     null, date, null, null, "0", null, "0",
-                    null, repairsStudent, repairsWork, repairsFault);
+                    null, repairsStudent, repairsWork, repairsFault, null, null);
             repairsOrderService.insertOrder(repairsOrder);
             flag = Boolean.TRUE;
         } catch (Exception e) {
@@ -550,7 +556,8 @@ public class OrderController {
      */
     @ApiOperation("维修工:订单已完成")
     @PostMapping(value = "/updateOrderFinish")
-    public ReturnValueUtil updateOrderFinish(@ApiParam(name = "订单ID", required = true) String orderId) {
+    public ReturnValueUtil updateOrderFinish(@ApiParam(name = "订单ID", required = true) String orderId,
+                                             @ApiParam(name = "维修完成图片", required = true) String repairImage) {
         Boolean flag = Boolean.FALSE;
         try {
             //当workId不为null时 数据库不会执行更新workId的sql
@@ -566,7 +573,7 @@ public class OrderController {
             if (!orderId.equals("")) {
                 RepairsOrder repairsOrder = new RepairsOrder(orderId, null, null, null,
                         timeDate, null, null, null, "3", null,
-                        null, null, null, repairsWork, null);
+                        null, null, null, repairsWork, null, null, repairImage);
                 ArrayList<RepairsOrder> orderArrayList = new ArrayList<>();
                 orderArrayList.add(repairsOrder);
                 repairsOrderService.updateOrderStatus(orderArrayList);
@@ -596,7 +603,7 @@ public class OrderController {
                 RepairsWork repairsWork = new RepairsWork();
                 RepairsOrder repairsOrder = new RepairsOrder(orderId, null, null, null,
                         null, null, null, null, "0", null,
-                        null, null, null, repairsWork, null);
+                        null, null, null, repairsWork, null, null, null);
                 ArrayList<RepairsOrder> orderArrayList = new ArrayList<>();
                 orderArrayList.add(repairsOrder);
                 repairsOrderService.updateOrderStatus(orderArrayList);
@@ -610,7 +617,7 @@ public class OrderController {
 
 
     /**
-     * 修改订单状态  维修工拒绝订单   orderStatus = 0
+     * 修改订单状态  维修工接受订单   orderStatus = 2
      *
      * @param
      * @param orderId
@@ -631,9 +638,12 @@ public class OrderController {
                 //传入时间就设置为当天时间
                 Date timeDate = sdf.parse(completeTime);
                 String time = sdf.format(timeDate);
+                Date date = new Date();
+                String repairTime = sdf.format(date);
+                Date orderRepairTime = sdf.parse(repairTime);
                 RepairsOrder repairsOrder = new RepairsOrder(orderId, null, null, null,
                         timeDate, null, null, null, "2", null,
-                        null, null, null, repairsWork, null);
+                        null, null, null, repairsWork, null, orderRepairTime, null);
                 ArrayList<RepairsOrder> orderArrayList = new ArrayList<>();
                 orderArrayList.add(repairsOrder);
                 repairsOrderService.updateOrderStatus(orderArrayList);
@@ -832,7 +842,7 @@ public class OrderController {
         sheetsList.add(dataMap2);
 
         Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
-        response.setContentType("applicationnd.ms-excel"); // 改成输出excel文件
+        response.setContentType("applicationnd/vnd.ms-excel"); // 改成输出excel文件
         String fileName = java.net.URLEncoder.encode("报修订单情况表", "UTF-8");
         response.setHeader("Content-disposition",
                 "attachment; filename=" + fileName + ".xls");// 03版本后缀xls,之后的xlsx

+ 17 - 1
src/main/java/com/chuanghai/repair/entity/RepairsOrder.java

@@ -83,7 +83,7 @@ public class RepairsOrder {
     private String orderAdvice;
 
     /**
-     * 订单状态 0(待接单)1(已接单)2(维修完成)3(退单)
+     * 订单状态 0(新订单)1(待接单)2(已接单)3(维修完成)4(退单)5(删除状态)
      */
 
     @ApiModelProperty(value = "订单状态 0(新订单)1(待接单)2(已接单)3(维修完成)4(退单)5(删除状态)")
@@ -113,6 +113,7 @@ public class RepairsOrder {
     @Column(name = "order_back")
     private String orderBack;
 
+
     /**
      * 学生学号
      * 订单与学生之间是  N:1
@@ -132,4 +133,19 @@ public class RepairsOrder {
      */
      private RepairsFault repairsFault;
 
+    /**
+     * 维修工接单时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @ApiModelProperty(value = "维修工接单时间")
+    @Column(name = "order_repair_time")
+    private Date orderRepairTime;
+
+    /**
+     * 维修完成图片
+     */
+    @ApiModelProperty(value = "维修完成图片")
+    @Column(name = "repair_image")
+    private String repairImage;
+
 }

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

@@ -108,6 +108,8 @@ public interface RepairsOrderMapper  {
      */
     List<RepairsOrder> queryByTime(String systemTime,String changeTime);
 
+    List<RepairsOrder> queryByTimes(String systemTime,String changeTime);
+
     /**
      * 查询所有评价的订单信息
      * @return

+ 2 - 0
src/main/java/com/chuanghai/repair/mapper/RepairsWorkMapper.java

@@ -71,4 +71,6 @@ public interface RepairsWorkMapper {
      * @throws Exception
      */
     void updateWork(List<RepairsWork> workList) throws Exception;
+
+    String queryByCardNumber(Integer workId);
 }

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

@@ -130,6 +130,8 @@ public interface RepairsOrderService {
      */
     List<RepairsOrder> queryByTime(String systemTime,String changeTime)throws Exception;
 
+    List<RepairsOrder> queryByTimes(String systemTime,String changeTime)throws Exception;
+
     /**
      * 查询所有评价的订单信息
      * @return

+ 2 - 0
src/main/java/com/chuanghai/repair/service/RepairsWorkService.java

@@ -79,4 +79,6 @@ public interface RepairsWorkService  {
      * @throws Exception
      */
     void updateWork(List<RepairsWork> workList) throws Exception;
+
+    String queryByCardNumber(Integer workId);
 }

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

@@ -287,6 +287,11 @@ public class RepairsOrderServiceImpl implements RepairsOrderService {
         return repairsOrderMapper.queryByTime(systemTime, changeTime);
     }
 
+    @Override
+    public List<RepairsOrder> queryByTimes(String systemTime, String changeTime) throws Exception {
+        return repairsOrderMapper.queryByTimes(systemTime, changeTime);
+    }
+
 
     /**
      * 查询所有评价的订单信息

+ 4 - 0
src/main/java/com/chuanghai/repair/service/ServiceImpl/RepairsWorkServiceImpl.java

@@ -111,4 +111,8 @@ public class RepairsWorkServiceImpl implements RepairsWorkService {
    public void updateWork(List<RepairsWork> workList) throws Exception{
         repairsWorkMapper.updateWork(workList);
    }
+
+   public String queryByCardNumber(Integer workId){
+       return repairsWorkMapper.queryByCardNumber(workId);
+   }
 }

+ 11 - 6
src/main/java/com/chuanghai/repair/utils/CreateTokenUtil.java

@@ -7,6 +7,9 @@ import com.auth0.jwt.algorithms.Algorithm;
 //import com.sun.deploy.net.URLEncoder;
 
 import com.auth0.jwt.exceptions.JWTCreationException;
+import com.chuanghai.repair.entity.RepairsOrder;
+import com.chuanghai.repair.service.RepairsOrderService;
+import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
@@ -17,14 +20,14 @@ import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.PrintStream;
 import java.net.URI;
 import java.net.URLEncoder;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * @Author: bingo
@@ -255,13 +258,15 @@ public class CreateTokenUtil {
         return verify(token, "userId");
     }
 
+//    @Resource(name = "repairsOrderService")
+//    private static RepairsOrderService repairsOrderService;
 
     public static void main(String[] args) {
-        String id = "360100188808088886";
+        String id = "20200210260236";
         String userId = "userId";
         String token = getToken(id);
         System.out.println(token);
-        String s = verify("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTUwODU0OTQsInVzZXJJZCI6IjM2MDcyMTE5OTgwMjE0MTYxOCJ9.gB_NULyl5971cl-go7TDAm_pLtcbrhTyJFCaJb4Oy1g", userId);
+        String s = verify("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTUyNzU4MzUsInVzZXJJZCI6IjM2MDEwMDE4ODgwODA4ODg4NiJ9.TrUsnwGAdtxr_sb-WyAZJ-zQsTAtNPJgKBt83AGuj5c", userId);
         System.out.println(s);
     }
 }

+ 6 - 2
src/main/resources/application.yml

@@ -18,7 +18,7 @@ spring:
     driver-class-name: com.mysql.cj.jdbc.Driver
     username: root
     password: root
-
+#    password: 20010420
   #数据库方言
   jpa:
     database-platform: org.hibernate.dialect.MySQLDialect
@@ -46,7 +46,7 @@ mybatis:
 # 图片地址
 img:
   # 图片保存地址
-  #saveLocation: E:\devImg\repair\
+#  saveLocation: C:\Users\27951\Desktop\repair
   saveLocation: /usr/local/nginx-1.18.0/html/repair_reporting_system/repair_image/
 
   # 图片预览地址
@@ -67,7 +67,11 @@ weixiao:
   serverUrl: https://jtishfw.ncjti.edu.cn/baoxiu/
 
   title: 故障维修通知
+  errTitle: 订单退回通知
+  workTitle: 故障维修通知
   content: 用户您好,您的故障报修单已被维修师傅接单,维修师傅将于半小时后上门维修;请合理安排时间,谢谢合作。
+  errContent: 用户您好,您的故障报修订单已退回,请您认真填写故障订单并重新提交,谢谢合作。
+  workContent: 维修工您好,您已被指派维修订单,请尽快查看。
   sender: 维修管理办公室
 
 

+ 26 - 4
src/main/resources/mapper/RepairsOrderMapper.xml

@@ -56,7 +56,7 @@
     <!--    通过时间查询订单信息-->
     <select id="queryAllOrderByDate" parameterType="java.lang.String" resultMap="OrderFaultStudentMap">
 
-        select od.order_id, od.order_status,od.order_commit_time, fa.fault_name,st.dorm_number,
+        select od.order_id, od.order_status,od.order_commit_time, fa.fault_name,st.dorm_number, od.order_repair_time, od.repair_image,
         od.order_complete_time,od.order_expected_time,wo.work_name,od.order_back,st.student_phone,st.student_other_phone,od.order_advice
         from
         repairs_order od left join repairs_student st on od.student_id = st.student_id
@@ -89,7 +89,7 @@
     <!--    通过时间查询订单信息-->
     <select id="queryAllNewBackOrder" parameterType="java.lang.String" resultMap="OrderFaultStudentMap">
 
-        select od.order_id, od.order_status,od.order_commit_time, fa.fault_name,st.dorm_number,
+        select od.order_id, od.order_status,od.order_commit_time, fa.fault_name,st.dorm_number, od.order_repair_time, od.repair_image,
         od.order_complete_time,od.order_expected_time,wo.work_name,od.order_back,st.student_phone,od.order_advice,
         st.student_other_phone,od.order_back_time
         from
@@ -287,9 +287,10 @@
     <!--    订单填报-->
     <insert id="insertOrder" parameterType="com.chuanghai.repair.entity.RepairsOrder">
         insert into repairs_order (order_id,order_images,order_note,order_expected_time,order_status,order_price,
-        order_price_status,student_id,order_commit_time,fault_id)
+        order_price_status,student_id,order_commit_time,fault_id,order_repair_time,repair_image)
         values(#{orderId},#{orderImages},#{orderNote},#{orderExpectedTime},#{orderStatus},
-        #{orderPrice},#{orderPriceStatus},#{repairsStudent.studentId},#{orderCommitTime},#{repairsFault.faultId});
+        #{orderPrice},#{orderPriceStatus},#{repairsStudent.studentId},#{orderCommitTime},#{repairsFault.faultId},
+        #{orderRepairTime},#{repairImage});
     </insert>
 
 
@@ -314,6 +315,20 @@
                     </if>
                 </foreach>
             </trim>
+            <trim prefix="order_repair_time=case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    <if test="item.orderRepairTime != null ">
+                        when order_id = #{item.orderId} then #{item.orderRepairTime}
+                    </if>
+                </foreach>
+            </trim>
+            <trim prefix="repair_image=case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    <if test="item.repairImage == null ">
+                        when order_id = #{item.orderId} then #{item.repairImage}
+                    </if>
+                </foreach>
+            </trim>
 
             <trim prefix="order_complete_time=case" suffix="end,">
                 <foreach collection="list" item="item" index="index">
@@ -350,6 +365,13 @@
         and od.order_complete_time BETWEEN #{systemTime} AND #{changeTime}
     </select>
 
+    <select id="queryByTimes" 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}
+        and od.order_status = 4
+    </select>
+
 
     <resultMap id="OrderAdviceMap" type="com.chuanghai.repair.entity.RepairsOrder">
         <id column="order_id" property="orderId" jdbcType="VARCHAR"/>

+ 4 - 1
src/main/resources/mapper/RepairsWorkMapper.xml

@@ -63,8 +63,11 @@
     <select id="queryByWorkNamePhone" parameterType="java.lang.String" resultMap="AllRepairsWorkMap">
         select * from repairs_work where work_name = #{workName} and work_phone = #{workPhone}
     </select>
+    <select id="queryByCardNumber" resultType="java.lang.String">
+        select card_number from repairs_work where work_id = #{workId}
+    </select>
 
-<!--    更新维修工全部信息-->
+    <!--    更新维修工全部信息-->
     <update id="updateWork" parameterType="java.util.List" >
         update repairs_work
         <trim prefix="set" suffixOverrides=",">