Просмотр исходного кода

更改超时逻辑 如果一个单子有多个师傅 其中两个超时 就显示两个单子数

夏文涛 2 лет назад
Родитель
Сommit
dadb32ad73
22 измененных файлов с 1367 добавлено и 505 удалено
  1. 417 313
      .idea/workspace.xml
  2. 6 0
      src/main/java/com/repair/api/RepairRecordControllerAPI.java
  3. 15 0
      src/main/java/com/repair/common/utils/DictionaryCompare.java
  4. 112 0
      src/main/java/com/repair/common/utils/HttpUtils.java
  5. 166 0
      src/main/java/com/repair/common/utils/JaxbUtil.java
  6. 68 1
      src/main/java/com/repair/common/utils/WxUtil.java
  7. 6 0
      src/main/java/com/repair/config/WxOpenidConfig.java
  8. 230 91
      src/main/java/com/repair/controller/RepairRecordController.java
  9. 18 0
      src/main/java/com/repair/model/result/EndPay.java
  10. 61 0
      src/main/java/com/repair/model/result/PayResult.java
  11. 34 0
      src/main/java/com/repair/model/result/TongYiReturn.java
  12. 25 9
      src/main/java/com/repair/model/vo/MyRepairRecordVo.java
  13. 11 0
      src/main/java/com/repair/model/vo/RepairTechnicianVo.java
  14. 2 0
      src/main/java/com/repair/services/RepairEvaluateService.java
  15. 8 0
      src/main/java/com/repair/services/impl/RepairEvaluateServiceImpl.java
  16. 43 45
      src/main/resources/mapper/repair/RepairRecordMapper.xml
  17. 10 0
      target/classes/META-INF/spring-configuration-metadata.json
  18. 1 1
      target/classes/mapper/repair/RepairPayRecordMapper.xml
  19. 119 45
      target/classes/mapper/repair/RepairRecordMapper.xml
  20. 8 0
      target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
  21. 7 0
      target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
  22. BIN
      target/repair_system-0.0.1-SNAPSHOT.jar.original

Разница между файлами не показана из-за своего большого размера
+ 417 - 313
.idea/workspace.xml


+ 6 - 0
src/main/java/com/repair/api/RepairRecordControllerAPI.java

@@ -10,7 +10,9 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.Date;
 
 
@@ -23,6 +25,10 @@ public interface RepairRecordControllerAPI {
     @ApiOperation(value = "微信支付", notes = "微信支付", httpMethod = "POST")
     CommonResult pay(@Validated @RequestBody WxPayRequest wpr, BindingResult bindingResult) throws Exception;
 
+    @PostMapping(value = "/returnPay")
+    @ApiOperation(value = "微信支付回调", notes = "微信支付回调", httpMethod = "POST")
+    void returnPay(HttpServletRequest request, HttpServletResponse response) throws IOException;
+
     @PostMapping(value = "/insertRepairRecord")
     @ApiOperation(value = "提交报修订单", notes = "提交报修订单", httpMethod = "POST")
     CommonResult InsertRepairRecord(@Validated @RequestBody repairRecordRequest rrr, BindingResult bindingResult) throws Exception;

+ 15 - 0
src/main/java/com/repair/common/utils/DictionaryCompare.java

@@ -0,0 +1,15 @@
+package com.repair.common.utils;
+
+import java.util.Comparator;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/8/21 星期一 14:51
+ * @Description: com.repair.common.utils
+ * @Version: 1.0
+ */
+public class DictionaryCompare implements Comparator<String> {
+    public int compare(String o1, String o2) {
+        return o1.compareTo(o2);
+    }
+}

+ 112 - 0
src/main/java/com/repair/common/utils/HttpUtils.java

@@ -0,0 +1,112 @@
+package com.repair.common.utils;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+import org.apache.http.NameValuePair;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/8/21 星期一 14:58
+ * @Description: com.repair.common.utils
+ * @Version: 1.0
+ */
+public class HttpUtils {
+    /**
+     * 发送http post请求
+     *
+     * @param
+     *
+     * @param
+     *
+     */
+    public static String post(String url, Map<String, String> params) throws IOException {
+        CloseableHttpClient httpClient = null;
+        HttpPost httpPost = null;
+        String re = "";
+        try {
+            httpClient = HttpClients.createDefault();
+            RequestConfig requestConfig = RequestConfig.custom()
+                    .setSocketTimeout(20000).setConnectTimeout(20000).build();
+            httpPost = new HttpPost(url);
+            httpPost.setConfig(requestConfig);
+            List<NameValuePair> ps = new ArrayList<NameValuePair>();
+            for (String pKey : params.keySet()) {
+                ps.add(new BasicNameValuePair(pKey, params.get(pKey)));
+            }
+            httpPost.setEntity(new UrlEncodedFormEntity(ps));
+            CloseableHttpResponse response = httpClient.execute(httpPost);
+            HttpEntity httpEntity = response.getEntity();
+            re = EntityUtils.toString(httpEntity, "utf-8");
+        } catch (ClientProtocolException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (httpPost != null) {
+                    httpPost.releaseConnection();
+                }
+                if (httpClient != null) {
+                    httpClient.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return re;
+    }
+
+    /**
+     * 发送post请求Https,参数是字符串
+     *
+     * @param
+     * @return
+     */
+    public static String post(String url, String body) throws Exception {
+        String str = "";
+        CloseableHttpClient httpClient = null;
+        HttpPost httpPost = null;
+        try {
+            httpClient = HttpClients.createDefault();
+            RequestConfig requestConfig = RequestConfig.custom()
+                    .setSocketTimeout(20000).setConnectTimeout(20000).build();
+            httpPost = new HttpPost(url);
+            httpPost.setConfig(requestConfig);
+            httpPost.setEntity(new StringEntity(body, "utf-8"));
+            CloseableHttpResponse response = httpClient.execute(httpPost);
+            HttpEntity httpEntity = response.getEntity();
+            str = EntityUtils.toString(httpEntity, "utf-8");
+
+        } catch (ClientProtocolException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (httpPost != null) {
+                    httpPost.releaseConnection();
+                }
+                if (httpClient != null) {
+                    httpClient.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return str;
+    }
+}

+ 166 - 0
src/main/java/com/repair/common/utils/JaxbUtil.java

@@ -0,0 +1,166 @@
+package com.repair.common.utils;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+
+import javax.xml.bind.*;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.namespace.QName;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * 使用Jaxb2.0实现XML<->Java Object的Binder.
+ *
+ * 特别支持Root对象是List的情形.
+ *
+ * @author
+ */
+public class JaxbUtil {
+    // 多线程安全的Context.
+    private JAXBContext jaxbContext;
+
+    /**
+     * @param types
+     *            所有需要序列化的Root对象的类型.
+     */
+    public JaxbUtil(Class<?>... types) {
+        try {
+            jaxbContext = JAXBContext.newInstance(types);
+        } catch (JAXBException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Java Object->Xml.
+     */
+    public String toXml(Object root, String encoding) {
+        try {
+            StringWriter writer = new StringWriter();
+            createMarshaller(encoding).marshal(root, writer);
+            return writer.toString();
+        } catch (JAXBException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Java Object->Xml, 特别支持对Root Element是Collection的情形.
+     */
+    @SuppressWarnings("unchecked")
+    public String toXml(Collection root, String rootName, String encoding) {
+        try {
+            CollectionWrapper wrapper = new CollectionWrapper();
+            wrapper.collection = root;
+
+            JAXBElement<CollectionWrapper> wrapperElement = new JAXBElement<CollectionWrapper>(
+                    new QName(rootName), CollectionWrapper.class, wrapper);
+
+            StringWriter writer = new StringWriter();
+            createMarshaller(encoding).marshal(wrapperElement, writer);
+
+            return writer.toString();
+        } catch (JAXBException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Xml->Java Object.
+     */
+    @SuppressWarnings("unchecked")
+    public <T> T fromXml(String xml) {
+        try {
+            StringReader reader = new StringReader(xml);
+            return (T) createUnmarshaller().unmarshal(reader);
+        } catch (JAXBException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Xml->Java Object, 支持大小写敏感或不敏感.
+     */
+    @SuppressWarnings("unchecked")
+    public <T> T fromXml(String xml, boolean caseSensitive) {
+        try {
+            String fromXml = xml;
+            if (!caseSensitive)
+                fromXml = xml.toLowerCase();
+            StringReader reader = new StringReader(fromXml);
+            return (T) createUnmarshaller().unmarshal(reader);
+        } catch (JAXBException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 创建Marshaller, 设定encoding(可为Null).
+     */
+    public Marshaller createMarshaller(String encoding) {
+        try {
+            Marshaller marshaller = jaxbContext.createMarshaller();
+
+            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+
+            if (!ObjectUtils.isEmpty(encoding)) {
+                marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
+            }
+            return marshaller;
+        } catch (JAXBException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 创建UnMarshaller.
+     */
+    public Unmarshaller createUnmarshaller() {
+        try {
+            return jaxbContext.createUnmarshaller();
+        } catch (JAXBException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 封装Root Element 是 Collection的情况.
+     */
+    public static class CollectionWrapper {
+        @SuppressWarnings("unchecked")
+        @XmlAnyElement
+        protected Collection collection;
+    }
+    /**
+     * 把map转换成xml格式
+     * @param params
+     * @return
+     * @throws Exception
+     */
+    public static String getRequestXml(Map<String, String> params) throws Exception{
+        StringBuffer sb = new StringBuffer();
+        sb.append("<xml>");
+        Set<Entry<String, String>> es = params.entrySet();
+        Iterator<Entry<String, String>> it = es.iterator();
+        while (it.hasNext()) {
+            Entry<String, String> entry = (Entry<String, String>) it
+                    .next();
+            String k = (String) entry.getKey();
+            String v = (String) entry.getValue();
+            if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k)) {
+                sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");
+            } else {
+                sb.append("<" + k + ">" + v + "</" + k + ">");
+            }
+        }
+        sb.append("</xml>");
+
+//        return sb.toString();
+        return new String(sb.toString().toString().getBytes(), "utf-8");
+    }
+}

+ 68 - 1
src/main/java/com/repair/common/utils/WxUtil.java

@@ -1,13 +1,14 @@
 package com.repair.common.utils;
 
 import com.repair.config.WxOpenidConfig;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
-import javax.servlet.ServletOutputStream;
+import java.util.Map.Entry;
 import javax.servlet.http.HttpServletResponse;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -375,5 +376,71 @@ public class WxUtil {
 		response.getWriter().close();
 	}
 
+	/**
+	 * 获得随机字符串
+	 *
+	 * @return
+	 */
+	public static String getWxNonceStr() {
+		Random random = new Random();
+		long val = random.nextLong();
+		String res = DigestUtils.md5Hex(val + "yzx").toUpperCase();
+		if (32 < res.length())
+			return res.substring(0, 32);
+		else
+			return res;
+	}
 
+	/**
+	 * 获得签名
+	 *
+	 * @param params
+	 *            待编码参数,参数值为空不传入
+	 * @param key
+	 *            key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
+	 * @return
+	 */
+	public static String getSign(Map<String, String> params, String key)
+			throws Exception {
+		List<String> list = new ArrayList<String>(params.keySet());
+		Collections.sort(list, new DictionaryCompare());
+		StringBuffer sb = new StringBuffer();
+		for (String keyVal : list) {
+			if (params.get(keyVal) != null) {
+				sb.append(keyVal + "=" + params.get(keyVal) + "&");
+			}
+		}
+		sb.append("key=" + key);
+		return DigestUtils
+				.md5Hex(new String(sb.toString().getBytes(), "utf-8"))
+				.toUpperCase();
+	}
+
+	/**
+	 * 把map转换成xml格式
+	 * @param params
+	 * @return
+	 * @throws Exception
+	 */
+	public static String getRequestXml(Map<String, String> params) throws Exception{
+		StringBuffer sb = new StringBuffer();
+		sb.append("<xml>");
+		Set<Entry<String, String>> es = params.entrySet();
+		Iterator<Entry<String, String>> it = es.iterator();
+		while (it.hasNext()) {
+			Entry<String, String> entry = (Entry<String, String>) it
+					.next();
+			String k = (String) entry.getKey();
+			String v = (String) entry.getValue();
+			if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k)) {
+				sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");
+			} else {
+				sb.append("<" + k + ">" + v + "</" + k + ">");
+			}
+		}
+		sb.append("</xml>");
+
+//        return sb.toString();
+		return new String(sb.toString().toString().getBytes(), "utf-8");
+	}
 }

+ 6 - 0
src/main/java/com/repair/config/WxOpenidConfig.java

@@ -34,4 +34,10 @@ public class WxOpenidConfig {
 
     //微信小程序secret
     private String xsecret;
+
+    //商户号
+    private String shappid;
+
+    //商户密钥
+    private String shsecret;
 }

+ 230 - 91
src/main/java/com/repair/controller/RepairRecordController.java

@@ -1,24 +1,31 @@
 package com.repair.controller;
 
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.interfaces.Func;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jcraft.jsch.*;
 import com.repair.api.RepairRecordControllerAPI;
 import com.repair.common.utils.*;
+import com.repair.config.WxOpenidConfig;
 import com.repair.model.enumModel.*;
 import com.repair.model.pojo.*;
 import com.repair.model.request.*;
-import com.repair.model.result.CommonResult;
-import com.repair.model.result.PageUtils;
+import com.repair.model.result.*;
 import com.repair.model.vo.*;
 import com.repair.services.*;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.DateUtil;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.tomcat.util.http.ResponseUtil;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
@@ -28,8 +35,12 @@ import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.InputStream;
+import java.io.PrintWriter;
 import java.math.BigDecimal;
 import java.text.MessageFormat;
 import java.text.SimpleDateFormat;
@@ -85,10 +96,14 @@ public class RepairRecordController implements RepairRecordControllerAPI {
     private RepairSchoolService repairSchoolService;
     @Autowired
     private WeiXiaoUtil weiXiaoUtil;
+    @Autowired
+    private WxOpenidConfig wxOpenidConfig;
 
     @Override
     @Transactional(rollbackFor = {Exception.class})
     public CommonResult pay(WxPayRequest wpr, BindingResult bindingResult) throws Exception {
+        System.out.println("进入微信支付====");
+        System.out.println("微信支付参数====:"+JSON.toJSON(wpr));
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
             return CommonResult.fail(st);
@@ -154,9 +169,129 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             return CommonResult.fail("无法为其他订单支付");
         }
 
-        return null;
+        //微信支付以分为单位
+        int totalfee = (wpr.getTotalPrice().multiply(new BigDecimal(100))).intValue();
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("attach", "报修系统");//附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用。
+        params.put("appid", wxOpenidConfig.getXappid());//微信分配的小程序ID
+        params.put("mch_id", wxOpenidConfig.getShappid());//微信支付分配的商户号
+        String nonceStr = WxUtil.getWxNonceStr();
+        params.put("nonce_str", nonceStr);//随机字符串,长度要求在32位以内。推荐随机数生成算法
+        params.put("body", "南交-报修系统");//商品简单描述,该字段请按照规范传递,具体请见参数规定
+        params.put("out_trade_no", rr.getRecordNo());//商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。详见商户订单号
+        params.put("total_fee", String.valueOf(totalfee));//支付金额
+        params.put("spbill_create_ip", wxOpenidConfig.getIpconfig());//支持IPV4和IPV6两种格式的IP地址。调用微信支付API的机器IP:服务器IP地址
+        params.put("notify_url", "https://chtech.ncjti.edu.cn/campusMaintenance/repair-api/repair/api/repairPayRecord/repairPayment");//异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。
+        params.put("trade_type", "JSAPI");//取值如下:JSAPI,NATIVE,APP等,说明详见参数规定
+        params.put("openid", wpr.getOpenid());//trade_type=JSAPI时(即公众号支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识
+        String Sign = WxUtil.getSign(params, wxOpenidConfig.getShsecret());//参数 + 商户密钥
+        params.put("sign", Sign);
+        String retXml = WxUtil.getRequestXml(params);
+        String msg = HttpUtils.post("https://api.mch.weixin.qq.com/pay/unifiedorder", retXml);
+        System.out.println(msg);
+
+        // 支付失败
+        if (msg.indexOf("FAIL") > -1) {
+            return CommonResult.fail("支付异常");
+        }
+
+        JaxbUtil requestBinder = new JaxbUtil(TongYiReturn.class, JaxbUtil.CollectionWrapper.class);
+        TongYiReturn to = requestBinder.fromXml(msg);
+
+        // 支付成功
+        if (to.getReturn_code().equals("SUCCESS") && to.getResult_code().equals("SUCCESS")) {
+            EndPay pay = new EndPay();
+            pay.setAppId(wxOpenidConfig.getXappid());
+            pay.setSignType("MD5");
+            pay.setTimeStamp(System.currentTimeMillis() / 1000 + "");
+            pay.setPrepay_id(to.getPrepay_id());
+            pay.setNonceStr(nonceStr);
+            Map<String, String> requestMap = new HashMap<String, String>();
+            requestMap.put("appId", pay.getAppId());
+            requestMap.put("timeStamp", pay.getTimeStamp());
+            requestMap.put("nonceStr", pay.getNonceStr());
+            requestMap.put("package", "prepay_id=" + pay.getPrepay_id());
+            requestMap.put("signType", "MD5");
+            pay.setPaySign(WxUtil.getSign(requestMap, wxOpenidConfig.getShsecret()));
+
+            return CommonResult.ok(pay);
+        }
+
+        return CommonResult.ok();
     }
 
+    /**
+     * 支付成功后回调,推送消息给商家
+     */
+    @Override
+    public void returnPay(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        System.out.println("进入支付回调====");
+        try {
+            BufferedReader reader = null;// BufferedReader 字符输入流
+            reader = request.getReader();
+            String line = "";
+            String xmlString = null;
+            StringBuilder inputString = new StringBuilder();
+            while ((line = reader.readLine()) != null) {
+                inputString.append(line);
+            }
+            xmlString = inputString.toString();
+            request.getReader().close();
+            JaxbUtil requestBinder = new JaxbUtil(PayResult.class, PayResult.class);
+            PayResult result = requestBinder.fromXml(xmlString);// Xml到Java,用fromXML()方法
+            String recordNo = result.getOut_trade_no();
+            System.out.println("支付成功回调,维修单号:" + recordNo);
+            RepairRecord rr = repairRecordService.queryRepairByRecordno(recordNo);
+            // 支付成功
+            if (result.getResult_code().equals("SUCCESS") && rr != null) {
+                RepairPayRecord rpr = repairPayRecordService.getRepairPayByRecordId(rr.getId());
+                if (rpr == null) {
+                    // 保存支付信息
+                    rpr = new RepairPayRecord();
+                    rpr.setRecordId(rr.getId());
+                    rpr.setUserId(rr.getUserId());
+                    rpr.setPayNo(result.getNonce_str());
+                    rpr.setPayPrice(new BigDecimal(result.getTotal_fee() / 100));
+                    rpr.setIsSuccess(ePayStatu.Paysuccess.getValue());
+                    rpr.setRemark("微信支付支付成功");
+                    int insertRpr = repairPayRecordService.insertRepairPayRecord(rpr);
+                    if (insertRpr <= 0) {
+                        String returnMsg = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[MESSAGE]]></return_msg></xml>";
+                        response.getWriter().write(returnMsg);// 发送消息返回给微信
+                    }
+                } else if (rpr.getIsSuccess() != ePayStatu.Paysuccess.getValue()) {
+                    rpr.setPayNo(result.getNonce_str());
+                    rpr.setPayPrice(new BigDecimal(result.getTotal_fee() / 100));
+                    rpr.setIsSuccess(ePayStatu.Paysuccess.getValue());
+                    rpr.setRemark(rpr.getRemark() + "微信支付支付成功");
+                    int updateRpr = repairPayRecordService.updateRepairPayRecord(rpr);
+                    if (updateRpr <= 0) {
+                        String returnMsg = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[MESSAGE]]></return_msg></xml>";
+                        response.getWriter().write(returnMsg);// 发送消息返回给微信
+                    }
+                }
+
+                rr.setMaintenanceState(eRecordStatu.Maintenance.getValue());
+
+                int updateRecord = repairRecordService.updateRepairRecord(rr);
+                if (updateRecord <= 0) {
+                    String returnMsg = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[MESSAGE]]></return_msg></xml>";
+                    response.getWriter().write(returnMsg);// 发送消息返回给微信
+                }
+
+                String returnMsg = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
+                response.getWriter().write(returnMsg);// 发送成功消息返回给微信
+            } else {
+                String returnMsg = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[MESSAGE]]></return_msg></xml>";
+                response.getWriter().write(returnMsg);// 发送消息返回给微信
+            }
+        } catch (Exception e) {
+            String returnMsg = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[MESSAGE]]></return_msg></xml>";
+            response.getWriter().write(returnMsg);// 发送消息返回给微信
+        }
+    }
+
+
     @Override
     @Transactional(rollbackFor = {Exception.class})
     public CommonResult InsertRepairRecord(repairRecordRequest rrr, BindingResult bindingResult) throws Exception {
@@ -487,11 +622,15 @@ public class RepairRecordController implements RepairRecordControllerAPI {
 
         List<RepairConsumables> rcs = repairConsumablesService.getRepairsByRecordIds(recordIds);
 
+        List<RepairEvaluate> evaluates = repairEvaluateService.getRepairByRecordIds(recordIds);
+
         for (MyRepairRecordVo r : result.getList()) {
+            long count = evaluates.stream().filter(e -> e.getRecordId().equals(r.getId())).count();
             r.setState(eRecordStatu.stringOf(r.getStateId()));
             r.setImages(Arrays.asList(r.getImage().split(",")));
             List<RepairConsumables> datas = rcs.stream().filter(e -> e.getRecordId() == r.getId()).collect(Collectors.toList());
             r.setConsumables(datas);
+            r.setEvaluate((count <= 0 && r.getStateId() == eRecordStatu.Finished.getValue()) ? 1 : 0);
         }
         return CommonResult.ok(result);
     }
@@ -522,6 +661,9 @@ public class RepairRecordController implements RepairRecordControllerAPI {
                 break;
             case 3://已超时
                 result = repairRecordService.queryTimeoutOrderList(currentPage, pageCount, userId, dateNow);
+                for (RepairTechnicianVo re:result.getList()) {
+                    re.setState(eRecordStatu.stringOf(re.getMaintenanceState()));
+                }
                 break;
             case 4://待审核
                 result = repairRecordService.queryExamineOrderList(currentPage, pageCount, userId);
@@ -2188,10 +2330,10 @@ public class RepairRecordController implements RepairRecordControllerAPI {
      * @throws Exception
      */
     @Override
-    public CommonResult repairArea(int state,int currentPage, int pageCount) throws Exception {
+    public CommonResult repairArea(int state, int currentPage, int pageCount) throws Exception {
         //    全部
         if (state == 0) {
-            IPage<RepairAreaVo> repairAreaTotal = repairRecordService.repairAreaTotal(currentPage,pageCount);
+            IPage<RepairAreaVo> repairAreaTotal = repairRecordService.repairAreaTotal(currentPage, pageCount);
             return CommonResult.ok(repairAreaTotal);
         }
 
@@ -2202,18 +2344,19 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             return CommonResult.fail("参数有误");
         }
 
-        IPage<RepairAreaVo> repairAreaTotal = repairRecordService.repairArea(startTime, endTime,currentPage,pageCount);
+        IPage<RepairAreaVo> repairAreaTotal = repairRecordService.repairArea(startTime, endTime, currentPage, pageCount);
 
         return CommonResult.ok(repairAreaTotal);
     }
 
     /**
      * 报修区域导出
+     *
      * @param state
      * @throws Exception
      */
     @Override
-    public void repairAreaExport(HttpServletResponse response,int state) throws Exception {
+    public void repairAreaExport(HttpServletResponse response, int state) throws Exception {
         String startTime = DateUtils.startTime(state);
         String endTime = DateUtils.endTime();
         List<RepairAreaVo> vos = repairRecordService.repairAreaExport(startTime, endTime);
@@ -2241,12 +2384,12 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             dataRow1.createCell(2).setCellValue(areaName);
             dataRow1.createCell(3).setCellValue(vo.getOrdersTotal());
             dataRow1.createCell(4).setCellValue(vo.getOrdersCompensation());
-            dataRow1.createCell(5).setCellValue( vo.getOrdersGratis());
+            dataRow1.createCell(5).setCellValue(vo.getOrdersGratis());
             BigDecimal totalPrice = vo.getTotalPrice();
             if (ObjectUtils.isEmpty(totalPrice)) {
-                totalPrice=new BigDecimal(0);
+                totalPrice = new BigDecimal(0);
             }
-            dataRow1.createCell(6).setCellValue( totalPrice.toString());
+            dataRow1.createCell(6).setCellValue(totalPrice.toString());
 
         }
 
@@ -2263,10 +2406,10 @@ public class RepairRecordController implements RepairRecordControllerAPI {
      * @throws Exception
      */
     @Override
-    public CommonResult maintenanceGoods(int state,int currentPage, int pageCount) throws Exception {
+    public CommonResult maintenanceGoods(int state, int currentPage, int pageCount) throws Exception {
         //    全部
         if (state == 0) {
-            IPage<MaintenanceGoodsVo> maintenanceGoodsVoList = repairRecordService.maintenanceGoodsTotal(currentPage,pageCount);
+            IPage<MaintenanceGoodsVo> maintenanceGoodsVoList = repairRecordService.maintenanceGoodsTotal(currentPage, pageCount);
             return CommonResult.ok(maintenanceGoodsVoList);
         }
 
@@ -2277,7 +2420,7 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             return CommonResult.fail("参数有误");
         }
 
-        IPage<MaintenanceGoodsVo> maintenanceGoodsVoList = repairRecordService.maintenanceGoods(startTime, endTime,currentPage,pageCount);
+        IPage<MaintenanceGoodsVo> maintenanceGoodsVoList = repairRecordService.maintenanceGoods(startTime, endTime, currentPage, pageCount);
         return CommonResult.ok(maintenanceGoodsVoList);
     }
 
@@ -2286,7 +2429,7 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         String startTime = DateUtils.startTime(state);
         String endTime = DateUtils.endTime();
 
-        List<MaintenanceGoodsVo> vos=repairRecordService.maintenanceGoodsExport(startTime, endTime);
+        List<MaintenanceGoodsVo> vos = repairRecordService.maintenanceGoodsExport(startTime, endTime);
 
         //        导出
         Workbook workbook = new XSSFWorkbook();
@@ -2306,13 +2449,13 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             dataRow1.createCell(1).setCellValue(vo.getArticleName());
             dataRow1.createCell(2).setCellValue(vo.getOrdersTotal());
             dataRow1.createCell(3).setCellValue(vo.getOrdersCompensation());
-            dataRow1.createCell(4).setCellValue( vo.getOrdersGratis());
+            dataRow1.createCell(4).setCellValue(vo.getOrdersGratis());
 
             BigDecimal totalPrice = vo.getTotalPrice();
             if (ObjectUtils.isEmpty(totalPrice)) {
-                totalPrice=new BigDecimal(0);
+                totalPrice = new BigDecimal(0);
             }
-            dataRow1.createCell(5).setCellValue( totalPrice.toString());
+            dataRow1.createCell(5).setCellValue(totalPrice.toString());
 
         }
         // 将工作簿写入文件
@@ -2328,7 +2471,7 @@ public class RepairRecordController implements RepairRecordControllerAPI {
      * @throws Exception
      */
     @Override
-    public CommonResult maintenanceWorker(int state,int currentPage, int pageCount) throws Exception {
+    public CommonResult maintenanceWorker(int state, int currentPage, int pageCount) throws Exception {
 
         String startTime = DateUtils.startTime(state);
         String endTime = DateUtils.endTime();
@@ -2337,7 +2480,7 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         wrapperReceiving.between(ObjectUtils.isNotEmpty(startTime), RepairReceiving::getReceivingTime, startTime, endTime);
         wrapperReceiving.isNotNull(RepairReceiving::getFinishTime);
         wrapperReceiving.groupBy(RepairReceiving::getUserId);
-        IPage<RepairReceiving> repairReceivingListPage = repairReceivingService.page(new Page<RepairReceiving>(currentPage,pageCount),wrapperReceiving);
+        IPage<RepairReceiving> repairReceivingListPage = repairReceivingService.page(new Page<RepairReceiving>(currentPage, pageCount), wrapperReceiving);
 
         LambdaQueryWrapper<RepairReceiving> wrapperReceiving2 = new LambdaQueryWrapper<>();
         wrapperReceiving2.between(ObjectUtils.isNotEmpty(startTime), RepairReceiving::getReceivingTime, startTime, endTime);
@@ -2432,8 +2575,8 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         Map<Integer, Long> sendMap = new HashMap<>();
 
 
-        LambdaQueryWrapper<RepairDispatchRecord> rdrsWrapper=new LambdaQueryWrapper<>();
-        rdrsWrapper.in(RepairDispatchRecord::getRecordId,recordList)
+        LambdaQueryWrapper<RepairDispatchRecord> rdrsWrapper = new LambdaQueryWrapper<>();
+        rdrsWrapper.in(RepairDispatchRecord::getRecordId, recordList)
                 .isNotNull(RepairDispatchRecord::getReceivingTime);
 
 
@@ -2444,7 +2587,7 @@ public class RepairRecordController implements RepairRecordControllerAPI {
 //                接单考核时间
             Integer acceptanceAssessTime = repairDispatchRecord.getAcceptanceAssessTime() * 1000 * 60;
 
-            long time=sendTime+acceptanceAssessTime;
+            long time = sendTime + acceptanceAssessTime;
 
 //                接单时间
             long receivingTime = repairDispatchRecord.getReceivingTime().getTime();
@@ -2455,10 +2598,10 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             if (sendCountMap.containsKey(usersId)) {
                 List<Integer> integers = sendCountMap.get(usersId);
                 integers.add(recordId);
-                sendCountMap.put(usersId,integers);
-            }else {
+                sendCountMap.put(usersId, integers);
+            } else {
                 ArrayList<Integer> integers = new ArrayList<>();
-                sendCountMap.put(usersId,integers);
+                sendCountMap.put(usersId, integers);
             }
 
 
@@ -2475,8 +2618,8 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             }
 
 //            接单时长=接单时间-派单时间(分)
-           Long orderReceivingTime=receivingTime-sendTime;
-            orderReceivingTime=orderReceivingTime/1000/60;
+            Long orderReceivingTime = receivingTime - sendTime;
+            orderReceivingTime = orderReceivingTime / 1000 / 60;
 
             if (sendMap.containsKey(usersId)) {
 //                  接单总时长
@@ -2491,15 +2634,13 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         }
 
 
-        LambdaQueryWrapper<RepairUser> userWrapper=new LambdaQueryWrapper<>();
-        userWrapper.in(RepairUser::getId,userList);
+        LambdaQueryWrapper<RepairUser> userWrapper = new LambdaQueryWrapper<>();
+        userWrapper.in(RepairUser::getId, userList);
 
         List<RepairUser> users = repairUserService.list(userWrapper);
 
 
-
-
-        Wrapper<RepairSchool> schoolWrapper=new LambdaQueryWrapper<>();
+        Wrapper<RepairSchool> schoolWrapper = new LambdaQueryWrapper<>();
         List<RepairSchool> schoolList = repairSchoolService.list(schoolWrapper);
 
         ArrayList<MaintenanceWorkerVo> vos = new ArrayList<>();
@@ -2531,25 +2672,25 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             if (maintainTimeOutMap.containsKey(id)) {
                 Integer integer = maintainTimeOutMap.get(id);
                 BigDecimal a = new BigDecimal(integer);
-                BigDecimal c= b;
+                BigDecimal c = b;
 //                接单
                 if (sendTimeOutMap.containsKey(id)) {
                     Integer integer1 = sendTimeOutMap.get(id);
                     BigDecimal bigDecimal = new BigDecimal(integer1);
-                    a=a.add(bigDecimal);
+                    a = a.add(bigDecimal);
                     List<Integer> integers = sendCountMap.get(id);
-                    c=c.add(new BigDecimal(integers.size()));
+                    c = c.add(new BigDecimal(integers.size()));
                 }
 
-                BigDecimal bigDecimal = a.divide(c,2,BigDecimal.ROUND_HALF_UP);
+                BigDecimal bigDecimal = a.divide(c, 2, BigDecimal.ROUND_HALF_UP);
                 BigDecimal multiply = bigDecimal.multiply(new BigDecimal(100));
-                maintenanceWorkerVo.setTimeOut(multiply+"%");
+                maintenanceWorkerVo.setTimeOut(multiply + "%");
             }
 
 //            平均维修时间
             Long aLong = maintainMap.get(id);
             BigDecimal bigDecimal = new BigDecimal(aLong);
-            BigDecimal maintain = bigDecimal.divide(b,2,BigDecimal.ROUND_HALF_UP);
+            BigDecimal maintain = bigDecimal.divide(b, 2, BigDecimal.ROUND_HALF_UP);
             maintenanceWorkerVo.setMaintain(maintain);
 
             //        平均响应时长
@@ -2558,41 +2699,40 @@ public class RepairRecordController implements RepairRecordControllerAPI {
                 BigDecimal bigDecimal1 = new BigDecimal(aLong1);
                 List<Integer> integers = sendCountMap.get(id);
                 BigDecimal bigDecimal2 = new BigDecimal(integers.size());
-                BigDecimal send = bigDecimal1.divide(bigDecimal2,2,BigDecimal.ROUND_HALF_UP);
+                BigDecimal send = bigDecimal1.divide(bigDecimal2, 2, BigDecimal.ROUND_HALF_UP);
                 maintenanceWorkerVo.setAnswer(send);
             }
 
 
-
 //            总费用
-            LambdaQueryWrapper<RepairRecord> recordWrapper=new LambdaQueryWrapper<>();
-            recordWrapper.in(RepairRecord::getId,recordsList);
+            LambdaQueryWrapper<RepairRecord> recordWrapper = new LambdaQueryWrapper<>();
+            recordWrapper.in(RepairRecord::getId, recordsList);
 
             List<RepairRecord> list = repairRecordService.list(recordWrapper);
-            BigDecimal totalPrice=new BigDecimal(0);
+            BigDecimal totalPrice = new BigDecimal(0);
             for (RepairRecord repairRecord : list) {
                 BigDecimal price = repairRecord.getPrice();
                 if (ObjectUtils.isNotEmpty(price)) {
-                    totalPrice=totalPrice.add(price);
+                    totalPrice = totalPrice.add(price);
                 }
             }
             maintenanceWorkerVo.setTotalPrice(totalPrice);
 
 //            好评率
-            LambdaQueryWrapper<RepairEvaluate> evaluateWrapper=new LambdaQueryWrapper<>();
-            evaluateWrapper.in(RepairEvaluate::getRecordId,recordsList);
+            LambdaQueryWrapper<RepairEvaluate> evaluateWrapper = new LambdaQueryWrapper<>();
+            evaluateWrapper.in(RepairEvaluate::getRecordId, recordsList);
 //      根据工单id来查询对应的评价
             List<RepairEvaluate> repairEvaluates = repairEvaluateService.list(evaluateWrapper);
             BigDecimal evaluatesDecimal = new BigDecimal(repairEvaluates.size());
-            BigDecimal satisfaction=new BigDecimal(0);
+            BigDecimal satisfaction = new BigDecimal(0);
             for (RepairEvaluate repairEvaluate : repairEvaluates) {
                 Integer star = repairEvaluate.getStar();
-                if (star>3) {
-                    satisfaction=satisfaction.add(new BigDecimal(1));
+                if (star > 3) {
+                    satisfaction = satisfaction.add(new BigDecimal(1));
                 }
             }
-            BigDecimal degreePraise = satisfaction.divide(evaluatesDecimal,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
-            maintenanceWorkerVo.setDegreePraise(degreePraise+"%");
+            BigDecimal degreePraise = satisfaction.divide(evaluatesDecimal, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
+            maintenanceWorkerVo.setDegreePraise(degreePraise + "%");
 
 
             vos.add(maintenanceWorkerVo);
@@ -2600,7 +2740,7 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         });
 
         IPage<MaintenanceWorkerVo> page = new Page();
-        BeanUtils.copyProperties(repairReceivingListPage,page);
+        BeanUtils.copyProperties(repairReceivingListPage, page);
         page.setRecords(vos);
 
         return CommonResult.ok(page);
@@ -2608,6 +2748,7 @@ public class RepairRecordController implements RepairRecordControllerAPI {
 
     /**
      * 维修师傅导出
+     *
      * @param response
      * @param state
      * @throws Exception
@@ -2709,8 +2850,8 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         Map<Integer, Long> sendMap = new HashMap<>();
 
 
-        LambdaQueryWrapper<RepairDispatchRecord> rdrsWrapper=new LambdaQueryWrapper<>();
-        rdrsWrapper.in(RepairDispatchRecord::getRecordId,recordList)
+        LambdaQueryWrapper<RepairDispatchRecord> rdrsWrapper = new LambdaQueryWrapper<>();
+        rdrsWrapper.in(RepairDispatchRecord::getRecordId, recordList)
                 .isNotNull(RepairDispatchRecord::getReceivingTime);
 
 
@@ -2721,7 +2862,7 @@ public class RepairRecordController implements RepairRecordControllerAPI {
 //                接单考核时间
             Integer acceptanceAssessTime = repairDispatchRecord.getAcceptanceAssessTime() * 1000 * 60;
 
-            long time=sendTime+acceptanceAssessTime;
+            long time = sendTime + acceptanceAssessTime;
 
 //                接单时间
             long receivingTime = repairDispatchRecord.getReceivingTime().getTime();
@@ -2732,10 +2873,10 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             if (sendCountMap.containsKey(usersId)) {
                 List<Integer> integers = sendCountMap.get(usersId);
                 integers.add(recordId);
-                sendCountMap.put(usersId,integers);
-            }else {
+                sendCountMap.put(usersId, integers);
+            } else {
                 ArrayList<Integer> integers = new ArrayList<>();
-                sendCountMap.put(usersId,integers);
+                sendCountMap.put(usersId, integers);
             }
 
 
@@ -2752,8 +2893,8 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             }
 
 //            接单时长=接单时间-派单时间(分)
-            Long orderReceivingTime=receivingTime-sendTime;
-            orderReceivingTime=orderReceivingTime/1000/60;
+            Long orderReceivingTime = receivingTime - sendTime;
+            orderReceivingTime = orderReceivingTime / 1000 / 60;
 
             if (sendMap.containsKey(usersId)) {
 //                  接单总时长
@@ -2768,13 +2909,13 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         }
 
 
-        LambdaQueryWrapper<RepairUser> userWrapper=new LambdaQueryWrapper<>();
-        userWrapper.in(RepairUser::getId,userList);
+        LambdaQueryWrapper<RepairUser> userWrapper = new LambdaQueryWrapper<>();
+        userWrapper.in(RepairUser::getId, userList);
 
         List<RepairUser> users = repairUserService.list(userWrapper);
 
 
-        Wrapper<RepairSchool> schoolWrapper=new LambdaQueryWrapper<>();
+        Wrapper<RepairSchool> schoolWrapper = new LambdaQueryWrapper<>();
         List<RepairSchool> schoolList = repairSchoolService.list(schoolWrapper);
 
         ArrayList<MaintenanceWorkerVo> vos = new ArrayList<>();
@@ -2806,25 +2947,25 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             if (maintainTimeOutMap.containsKey(id)) {
                 Integer integer = maintainTimeOutMap.get(id);
                 BigDecimal a = new BigDecimal(integer);
-                BigDecimal c= b;
+                BigDecimal c = b;
 //                接单
                 if (sendTimeOutMap.containsKey(id)) {
                     Integer integer1 = sendTimeOutMap.get(id);
                     BigDecimal bigDecimal = new BigDecimal(integer1);
-                    a=a.add(bigDecimal);
+                    a = a.add(bigDecimal);
                     List<Integer> integers = sendCountMap.get(id);
-                    c=c.add(new BigDecimal(integers.size()));
+                    c = c.add(new BigDecimal(integers.size()));
                 }
 
-                BigDecimal bigDecimal = a.divide(c,2,BigDecimal.ROUND_HALF_UP);
+                BigDecimal bigDecimal = a.divide(c, 2, BigDecimal.ROUND_HALF_UP);
                 BigDecimal multiply = bigDecimal.multiply(new BigDecimal(100));
-                maintenanceWorkerVo.setTimeOut(multiply+"%");
+                maintenanceWorkerVo.setTimeOut(multiply + "%");
             }
 
 //            平均维修时间
             Long aLong = maintainMap.get(id);
             BigDecimal bigDecimal = new BigDecimal(aLong);
-            BigDecimal maintain = bigDecimal.divide(b,2,BigDecimal.ROUND_HALF_UP);
+            BigDecimal maintain = bigDecimal.divide(b, 2, BigDecimal.ROUND_HALF_UP);
             maintenanceWorkerVo.setMaintain(maintain);
 
             //        平均响应时长
@@ -2833,41 +2974,40 @@ public class RepairRecordController implements RepairRecordControllerAPI {
                 BigDecimal bigDecimal1 = new BigDecimal(aLong1);
                 List<Integer> integers = sendCountMap.get(id);
                 BigDecimal bigDecimal2 = new BigDecimal(integers.size());
-                BigDecimal send = bigDecimal1.divide(bigDecimal2,2,BigDecimal.ROUND_HALF_UP);
+                BigDecimal send = bigDecimal1.divide(bigDecimal2, 2, BigDecimal.ROUND_HALF_UP);
                 maintenanceWorkerVo.setAnswer(send);
             }
 
 
-
 //            总费用
-            LambdaQueryWrapper<RepairRecord> recordWrapper=new LambdaQueryWrapper<>();
-            recordWrapper.in(RepairRecord::getId,recordsList);
+            LambdaQueryWrapper<RepairRecord> recordWrapper = new LambdaQueryWrapper<>();
+            recordWrapper.in(RepairRecord::getId, recordsList);
 
             List<RepairRecord> list = repairRecordService.list(recordWrapper);
-            BigDecimal totalPrice=new BigDecimal(0);
+            BigDecimal totalPrice = new BigDecimal(0);
             for (RepairRecord repairRecord : list) {
                 BigDecimal price = repairRecord.getPrice();
                 if (ObjectUtils.isNotEmpty(price)) {
-                    totalPrice=totalPrice.add(price);
+                    totalPrice = totalPrice.add(price);
                 }
             }
             maintenanceWorkerVo.setTotalPrice(totalPrice);
 
 //            好评率
-            LambdaQueryWrapper<RepairEvaluate> evaluateWrapper=new LambdaQueryWrapper<>();
-            evaluateWrapper.in(RepairEvaluate::getRecordId,recordsList);
+            LambdaQueryWrapper<RepairEvaluate> evaluateWrapper = new LambdaQueryWrapper<>();
+            evaluateWrapper.in(RepairEvaluate::getRecordId, recordsList);
 //      根据工单id来查询对应的评价
             List<RepairEvaluate> repairEvaluates = repairEvaluateService.list(evaluateWrapper);
             BigDecimal evaluatesDecimal = new BigDecimal(repairEvaluates.size());
-            BigDecimal satisfaction=new BigDecimal(0);
+            BigDecimal satisfaction = new BigDecimal(0);
             for (RepairEvaluate repairEvaluate : repairEvaluates) {
                 Integer star = repairEvaluate.getStar();
-                if (star>3) {
-                    satisfaction=satisfaction.add(new BigDecimal(1));
+                if (star > 3) {
+                    satisfaction = satisfaction.add(new BigDecimal(1));
                 }
             }
-            BigDecimal degreePraise = satisfaction.divide(evaluatesDecimal,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
-            maintenanceWorkerVo.setDegreePraise(degreePraise+"%");
+            BigDecimal degreePraise = satisfaction.divide(evaluatesDecimal, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
+            maintenanceWorkerVo.setDegreePraise(degreePraise + "%");
 
 
             vos.add(maintenanceWorkerVo);
@@ -2891,29 +3031,29 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         for (int i = 0; i < vos.size(); i++) {
             MaintenanceWorkerVo vo = vos.get(i);
             Row dataRow1 = sheet.createRow(i + 1);
-            dataRow1.createCell(0).setCellValue(i+1);
+            dataRow1.createCell(0).setCellValue(i + 1);
             dataRow1.createCell(1).setCellValue(vo.getSchoolName());
             dataRow1.createCell(2).setCellValue(vo.getName());
             dataRow1.createCell(3).setCellValue(vo.getWorkOrderTotal());
-            dataRow1.createCell(4).setCellValue( vo.getDegreePraise());
-            dataRow1.createCell(5).setCellValue( vo.getTimeOut());
+            dataRow1.createCell(4).setCellValue(vo.getDegreePraise());
+            dataRow1.createCell(5).setCellValue(vo.getTimeOut());
             BigDecimal answer = vo.getAnswer();
             if (ObjectUtils.isEmpty(answer)) {
-                answer=new BigDecimal(0);
+                answer = new BigDecimal(0);
             }
             dataRow1.createCell(6).setCellValue(answer.toString());
             BigDecimal maintain = vo.getMaintain();
             if (ObjectUtils.isEmpty(maintain)) {
-                maintain=new BigDecimal(0);
+                maintain = new BigDecimal(0);
             }
 
             dataRow1.createCell(7).setCellValue(maintain.toString());
 
             BigDecimal totalPrice = vo.getTotalPrice();
             if (ObjectUtils.isEmpty(totalPrice)) {
-                totalPrice=new BigDecimal(0);
+                totalPrice = new BigDecimal(0);
             }
-            dataRow1.createCell(8).setCellValue( totalPrice.toString());
+            dataRow1.createCell(8).setCellValue(totalPrice.toString());
 
         }
         // 将工作簿写入文件
@@ -2934,14 +3074,13 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         String startTime = DateUtils.startTime(state);
         String endTime = DateUtils.endTime();
 
-        
-
 
         return null;
     }
 
     /**
      * 报修趋势
+     *
      * @param state
      * @return
      * @throws Exception

+ 18 - 0
src/main/java/com/repair/model/result/EndPay.java

@@ -0,0 +1,18 @@
+package com.repair.model.result;
+
+import lombok.Data;
+
+/**
+ * 最后调用接口传的数据实体类;
+ * @author QT-666
+ *
+ */
+@Data
+public class EndPay {
+      private String appId;//商户注册具有支付权限的公众号成功后即可获得
+      private String timeStamp;//当前的时间,其他详见时间戳规则
+      private String nonceStr;//随机字符串,不长于32位。推荐随机数生成算法
+      private String prepay_id;//统一下单接口返回的prepay_id参数值,提交格式如:prepay_id=***
+      private String signType;//签名算法,暂支持MD5
+      private String paySign;//签名,详见签名生成算法
+}

+ 61 - 0
src/main/java/com/repair/model/result/PayResult.java

@@ -0,0 +1,61 @@
+package com.repair.model.result;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * 微信支付结果返回
+ *
+ * @author QT-666
+ *
+ */
+@Data
+@XmlRootElement(name="xml")
+public class PayResult {
+	private String appid;// 微信分配的公众账号ID(企业号corpid即为此appId)
+	private String attach;//附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用。
+	private String bank_type;// 银行类型,采用字符串类型的银行标识,银行类型见银行列表
+	private String fee_type;// 货币类型,符合ISO4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
+	private String is_subscribe;// 用户是否关注公众账号,Y-关注,N-未关注,仅在公众账号类型支付有效
+	private String mch_id;// 微信支付分配的商户号
+	private String nonce_str;// 随机字符串,不长于32位
+	private String openid;// 用户在商户appid下的唯一标识
+	private String out_trade_no;// 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@
+								// ,且在同一个商户号下唯一。
+	private String result_code;// SUCCESS/FAIL
+	private String return_code;// 此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
+	private String sign;// 签名,详见签名算法
+	private String sub_mch_id;//
+	private String time_end;// 支付完成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
+	private int total_fee;// 订单总金额,单位为分
+	private String trade_type;// JSAPI、NATIVE、APP
+	private String transaction_id;// 微信支付订单号
+	private int cash_fee;// 现金金额
+
+	private String device_info; //微信支付分配的终端设备号,
+    private String sign_type;//签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
+    private String settlement_total_fee ;//应结订单金额=订单金额-非充值代金券金额,应结订单金额<=订单金额。
+    private String cash_fee_type;//货币类型,符合ISO4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
+    private String  coupon_fee;//代金券金额<=订单金额,订单金额-代金券金额=现金支付金额,详见支付金额
+    private String coupon_count;//代金券使用数量
+    private String coupon_type_$n;// CASH--充值代金券 NO_CASH---非充值代金券 仅在使用了免充值代金券时有返回(取值:CASH、NO_CASH)。$n为下标,从0开始编号,举例:coupon_type_0
+    private String coupon_id_$n;//代金券ID,$n为下标,从0开始编号
+    private String coupon_fee_$n;//单个代金券支付金额,$n为下标,从0开始编号
+	private String trade_state;
+
+	@Override
+	public String toString() {
+		return "PayResult [appid=" + appid + ", attach=" + attach
+				+ ", bank_type=" + bank_type + ", fee_type=" + fee_type
+				+ ", is_subscribe=" + is_subscribe + ", mch_id=" + mch_id
+				+ ", nonce_str=" + nonce_str + ", openid=" + openid
+				+ ", out_trade_no=" + out_trade_no + ", result_code="
+				+ result_code + ", return_code=" + return_code + ", sign="
+				+ sign + ", sub_mch_id=" + sub_mch_id + ", time_end="
+				+ time_end + ", total_fee=" + total_fee + ", trade_type="
+				+ trade_type + ", transaction_id=" + transaction_id
+				+ ", cash_fee=" + cash_fee +",trade_state="+trade_state;
+	}
+
+}

+ 34 - 0
src/main/java/com/repair/model/result/TongYiReturn.java

@@ -0,0 +1,34 @@
+package com.repair.model.result;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * 调用统一下单接口返回的数据实体类
+ *
+ * @author QT-666
+ */
+@Data
+@XmlRootElement(name = "xml")
+public class TongYiReturn {
+    private String return_code; //
+    private String return_msg;  //
+    private String appid;       // 调用接口提交的公众账号ID
+    private String mch_id;      // 调用接口提交的商户号
+    private String nonce_str;   //微信返回的随机字符串
+    private String sign;        //微信返回的签名值,详见签名算法
+    private String prepay_id;   //微信生成的预支付会话标识,用于后续接口调用中使用,该值有效期为2小时
+    private String result_code; //SUCCESS/FAIL
+    private String trade_type;  //交易类型,取值为:JSAPI,NATIVE,APP等,说明详见参数规定
+
+    @Override
+    public String toString() {
+        return "TongYiReturn [return_code=" + return_code + ", return_msg="
+                + return_msg + ", appid=" + appid + ", mch_id=" + mch_id
+                + ", nonce_str=" + nonce_str + ", sign=" + sign
+                + ", prepay_id=" + prepay_id + ", result_code=" + result_code
+                + ", trade_type=" + trade_type + "]";
+    }
+
+}

+ 25 - 9
src/main/java/com/repair/model/vo/MyRepairRecordVo.java

@@ -126,18 +126,34 @@ public class MyRepairRecordVo {
     private String timeoutStr;
 
     public String getTimeoutStr() {
-
-        StringBuilder sb = new StringBuilder();
-        if(timeoutDispStr != null && stateId == eRecordStatu.Dispatch.getValue()){
-            sb.append(timeoutDispStr);
-        }
-        if(timeoutReceStr != null && stateId == eRecordStatu.Maintenance.getValue()){
-            sb.append(timeoutReceStr);
-        }
-        return sb.length() == 0 ? timeoutStr : sb.toString();
+        return timeoutDispStr;
     }
 
     public void setTimeoutStr(String timeoutStr) {
         this.timeoutStr = timeoutStr;
     }
+
+    /**
+     * 超时状态:
+     * 超时未接
+     * 查看是否有接单数据,
+     * 维修超时
+     */
+    private String maintenanceTimeout;
+
+    public String getMaintenanceTimeout() {
+        return timeoutReceStr;
+    }
+
+    public void setMaintenanceTimeout(String maintenanceTimeout) {
+        this.maintenanceTimeout = maintenanceTimeout;
+    }
+
+    /**
+     * 出现评价按钮
+     * 不出现:0
+     * 出现:1
+     */
+    private int evaluate;
+
 }

+ 11 - 0
src/main/java/com/repair/model/vo/RepairTechnicianVo.java

@@ -87,11 +87,22 @@ public class RepairTechnicianVo {
     private String state;
 
     /**
+     * 工单状态ID
+     */
+    @JsonIgnore
+    private Integer maintenanceState;
+
+    /**
      * 工单超时状态
      */
     private String timeoutStr;
 
     /**
+     * 工单超时状态2
+     */
+    private String maintenanceTimeout;
+
+    /**
      * 维修师傅
      */
     private String maintenancerName;

+ 2 - 0
src/main/java/com/repair/services/RepairEvaluateService.java

@@ -32,4 +32,6 @@ public interface RepairEvaluateService extends IService<RepairEvaluate> {
     List<RecordEvaluateVo> queryEvaluateList(String dateStr);
 
     boolean inserBatchEvaluate(List<RepairEvaluate> datas);
+
+    List<RepairEvaluate> getRepairByRecordIds(List<Integer> recordIds);
 }

+ 8 - 0
src/main/java/com/repair/services/impl/RepairEvaluateServiceImpl.java

@@ -91,4 +91,12 @@ public class RepairEvaluateServiceImpl extends ServiceImpl<RepairEvaluateMapper,
         boolean result = this.saveBatch(datas);
         return result;
     }
+
+    @Override
+    public List<RepairEvaluate> getRepairByRecordIds(List<Integer> recordIds) {
+        QueryWrapper<RepairEvaluate> query = new QueryWrapper();
+        query.in("record_id", recordIds);
+        List<RepairEvaluate> result = repairEvaluateMapper.selectList(query);
+        return result;
+    }
 }

Разница между файлами не показана из-за своего большого размера
+ 43 - 45
src/main/resources/mapper/repair/RepairRecordMapper.xml


+ 10 - 0
target/classes/META-INF/spring-configuration-metadata.json

@@ -38,6 +38,16 @@
       "sourceType": "com.repair.config.WxOpenidConfig"
     },
     {
+      "name": "openid.shappid",
+      "type": "java.lang.String",
+      "sourceType": "com.repair.config.WxOpenidConfig"
+    },
+    {
+      "name": "openid.shsecret",
+      "type": "java.lang.String",
+      "sourceType": "com.repair.config.WxOpenidConfig"
+    },
+    {
       "name": "openid.xappid",
       "type": "java.lang.String",
       "sourceType": "com.repair.config.WxOpenidConfig"

+ 1 - 1
target/classes/mapper/repair/RepairPayRecordMapper.xml

@@ -15,7 +15,7 @@
         inner join repair_record rr on rr.deleted = 0 and rr.record_no = #{recordNo} and rr.id = rpr.record_id
         where rpr.deleted = 0
     </select>
-<select id="queryExport" resultType="com.repair.model.vo.QueryExportVo">
+    <select id="queryExport" resultType="com.repair.model.vo.QueryExportVo">
         SELECT row_number() over ( ORDER BY dc.pay_time ) AS id, dc.*
         FROM
         (SELECT

Разница между файлами не показана из-за своего большого размера
+ 119 - 45
target/classes/mapper/repair/RepairRecordMapper.xml


+ 8 - 0
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst

@@ -152,6 +152,7 @@ com\repair\model\vo\AddressBookListVo.class
 com\repair\mapper\RepairNoticeSettingMapper.class
 com\repair\model\request\UserScheduleRequest.class
 com\repair\services\RepairShiftSettingsService.class
+com\repair\common\utils\JaxbUtil$CollectionWrapper.class
 com\repair\common\utils\WxUtil.class
 com\repair\model\vo\ClassesSettingPageVo.class
 com\repair\controller\RepairAreaController.class
@@ -172,6 +173,7 @@ com\repair\model\vo\StatisticsVo.class
 com\repair\model\request\transferApplyRequest.class
 com\repair\services\RepairLeaveMessageService.class
 com\repair\mapper\RepairSystemSettingMapper.class
+com\repair\model\result\PayResult.class
 com\repair\model\vo\NoticeVo.class
 com\repair\model\request\loginRequest.class
 com\repair\model\vo\UploadFileVo.class
@@ -209,7 +211,9 @@ com\repair\model\vo\EvaluateVo.class
 com\repair\mapper\RepairClassesSettingsMapper.class
 com\repair\model\request\insertConsumablesRequest.class
 com\repair\model\vo\ConsumablePageVo.class
+com\repair\common\utils\JaxbUtil.class
 com\repair\model\vo\RepairCampusVo.class
+com\repair\common\utils\HttpUtils.class
 com\repair\common\utils\TimeExchange$1.class
 com\repair\model\request\updateRepairAdminRequest.class
 com\repair\model\request\repairPayRequest.class
@@ -230,6 +234,8 @@ com\repair\model\pojo\RepairTrackRecord.class
 com\repair\common\utils\EncryptionUtil.class
 com\repair\controller\LoginController.class
 com\repair\model\pojo\RepairUser.class
+com\repair\model\result\EndPay.class
+com\repair\model\result\TongYiReturn.class
 com\repair\common\utils\MimeTypeUtils.class
 com\repair\model\vo\ChangeConsumesVo.class
 com\repair\model\vo\CollaborateDataVo.class
@@ -324,11 +330,13 @@ com\repair\common\result\ResponseStatusEnum.class
 com\repair\services\impl\RepairTrackRecordServiceImpl.class
 com\repair\mapper\RepairCollaborateRecordMapper.class
 com\repair\model\request\ReceiveSendOrdersRequest.class
+com\repair\common\utils\DictionaryCompare.class
 com\repair\model\pojo\RepairAdmin.class
 com\repair\mapper\RepairRefundRecordMapper.class
 com\repair\model\request\insertRepairShiftSettingRequest.class
 com\repair\services\RepairConsumablesService.class
 com\repair\model\request\changePasswordRequest.class
+com\repair\model\enumModel\ePayStatu.class
 com\repair\model\enumModel\eSchool.class
 com\repair\model\vo\CollaborateRecordVo.class
 com\repair\model\pojo\RepairReceiving.class

+ 7 - 0
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -43,6 +43,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\SHA1.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\RepairWorkTypeVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\enumModel\ePayPageStatu.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\result\PayResult.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\SystemMessagePageVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairAreaService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\updateRepairArticleTypeRequest.java
@@ -98,6 +99,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\WxPayRequest.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\AddressBookVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\DetailsVo.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\JaxbUtil.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\pendingOrderVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\ClassesSettingPageVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\ConsumablePageVo.java
@@ -113,11 +115,13 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairArticleType.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairConsumablesService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\MimeTypeUtils.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\enumModel\ePayStatu.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\StatisticsVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\enumModel\eTechnicianStatu.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairReceiving.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairAreaControllerAPI.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\ReceiveSendOrdersRequest.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\result\EndPay.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\SystemMenuVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\WxAccessTokenService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairSchoolControllerAPI.java
@@ -132,6 +136,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\transferApplyRequest.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairShiftSettingsControllerAPI.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairCollaborateRecordControllerAPI.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\DictionaryCompare.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairArticleTypeServiceImpl.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairArticleTypeService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\ReportExportVo.java
@@ -207,6 +212,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairNoticeSetting.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\controller\RepairAdminController.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairAreaServiceImpl.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\result\TongYiReturn.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\RepairSchoolVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\SeqUtils.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\paramUtils.java
@@ -315,6 +321,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\mapper\RepairPayRecordMapper.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\RepairArticleTreeVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairCloseService.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\HttpUtils.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\core\JwtAuthenticationInterceptor.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairTransferRecordService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\MobileRevertRequest.java

BIN
target/repair_system-0.0.1-SNAPSHOT.jar.original