liusheng
2023-10-13 b1bd4cbd01cb8d7616de0b3c321439985a149e5e
代码提交
已添加14个文件
已修改8个文件
1003 ■■■■■ 文件已修改
ruoyi-admin/pom.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/read/PatientInfoImportController.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/socket/SocketCommunication.java 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/TomcatConfig.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/webservice/PateintBaseService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/webservice/PstientWSConfig.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/webservice/impl/PateintBaseServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/enums/FollowUpEnum.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EquipmentinfoServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/DingTalkReqVo.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceThirdData.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/ServiceThirdDataMapper.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/IServiceThirdDataService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/RemoteDataSaveService.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/RemoteDataSaveServiceImpl.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceThirdDataServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceThirdDataMapper.xml 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/pom.xml
@@ -8,8 +8,9 @@
        <version>3.8.5</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
<!--    <packaging>war</packaging>-->
    <packaging>jar</packaging>
    <artifactId>ruoyi-admin</artifactId>
    <artifactId>smartor-admin</artifactId>
    <description>
        web服务入口
@@ -17,7 +18,7 @@
    <dependencies>
       <!-- spring-boot-devtools -->
        <!-- spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
@@ -37,7 +38,7 @@
            <version>1.6.2</version>
        </dependency>
         <!-- Mysql驱动包 -->
        <!-- Mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
@@ -85,6 +86,41 @@
            <artifactId>json</artifactId>
            <version>20210307</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>stax2-api</artifactId>
            <version>3.1.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ca.uhn.hapi/hapi-base -->
        <dependency>
            <groupId>ca.uhn.hapi</groupId>
            <artifactId>hapi-base</artifactId>
            <version>2.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ca.uhn.hapi/hapi-structures-v24 -->
        <dependency>
            <groupId>ca.uhn.hapi</groupId>
            <artifactId>hapi-structures-v24</artifactId>
            <version>2.3</version>
        </dependency>
    </dependencies>
    <build>
@@ -112,7 +148,7 @@
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <warName>${project.artifactId}</warName>
                </configuration>
           </plugin>
            </plugin>
        </plugins>
        <finalName>${project.artifactId}</finalName>
    </build>
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -1,5 +1,6 @@
package com.ruoyi;
import com.ruoyi.web.controller.socket.SocketCommunication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@@ -28,5 +29,7 @@
                " |  | \\ `'   /|   `-'  /           \n" +
                " |  |  \\    /  \\      /           \n" +
                " ''-'   `'-'    `-..-'              ");
        //开启SOCKET
        new SocketCommunication().socketCommunication();
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/read/PatientInfoImportController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
package com.ruoyi.web.controller.read;
import com.ruoyi.common.core.controller.BaseController;
import com.smartor.service.IBaseTagService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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 java.util.Arrays;
import java.util.List;
/**
 * æ‚£è€…信息导入(接收联众消息推送)
 *
 * @author ls
 * @date 2023-08-03
 */
@Slf4j
@Api(description = "患者信息导入(接收联众消息推送)")
@RestController
@RequestMapping("/patient/read")
public class PatientInfoImportController extends BaseController {
    @Autowired
    private IBaseTagService baseTagService;
    /**
     * æ‚£è€…基本信息
     */
    @ApiOperation("患者基本信息")
    @PostMapping("/patientInfo")
    public void patientBaseInfo(@RequestParam String pateintInfo) {
        log.info("患者基本信息 : {}", pateintInfo);
        String[] split = pateintInfo.split("\\|");
        List<String> stringList = Arrays.asList(split);
        System.out.println(stringList);
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/socket/SocketCommunication.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,199 @@
package com.ruoyi.web.controller.socket;
import ca.uhn.hl7v2.DefaultHapiContext;
import ca.uhn.hl7v2.HapiContext;
import ca.uhn.hl7v2.model.v24.message.ACK;
import ca.uhn.hl7v2.parser.Parser;
import com.ruoyi.common.utils.StringUtils;
import com.smartor.service.impl.RemoteDataSaveServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RestController;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.*;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@RestController
@Slf4j
public class SocketCommunication {
    public String socketCommunication() {
        try {
            // åˆ›å»º ServerSocket å®žä¾‹ï¼Œç›‘听 8080 ç«¯å£
            ServerSocket serverSocket = new ServerSocket(8999);
            //固定线程池来接收处理
            Executor executor = Executors.newFixedThreadPool(3);
            // ç­‰å¾…客户端连接
            while (true) {
                Socket socket = serverSocket.accept();
//                new Thread(new MyRuns(socket)).start();
                executor.execute(new MyRuns(socket));
            }
        } catch (IOException e) {
            e.printStackTrace();
            return "发生异常:" + e.getMessage();
        }
    }
}
class MyRuns implements Runnable {
    Socket socket;
    BufferedReader reader;
    PrintWriter writer = null;
    //   BufferedWriter writer;
    public MyRuns(Socket socket) {
        super();
        this.socket = socket;
    }
    public void run() {
        Map<String, List> map = new HashMap<>();
        try {
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));//读取客户端消息
            //   writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);//向客户端写消息
            //获取第一行数据
            String oneLine = reader.readLine();
            // åˆ›å»ºHapiContext实例
            HapiContext context = new DefaultHapiContext();
            // åˆ›å»ºParser实例
            Parser parser = context.getPipeParser();
            // è§£æžHL7消息
            List<String> list = dataExplain(oneLine);
            map.put(list.get(0).trim(), list);
            //获取返回数据
            String messageControlID = list.get(9);
            String timeOfAnEvent = list.get(6);
            String senderApp = list.get(2);
            String senderFac = list.get(3);
            String dataType = list.get(8);
            if (StringUtils.isNotEmpty(dataType)) {
                int endIndex = dataType.lastIndexOf("^");
                dataType = dataType.substring(0, endIndex);
                int endIndex2 = dataType.lastIndexOf("^");
                dataType = dataType.substring(endIndex2);
            }
            //设置时间戳
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYYMMddHHmmss");
            String timestamp = simpleDateFormat.format(new Date());
            //返回响应(响应数据进行组装)
            ACK ack = new ACK();
            ack.initQuickstart("ACK", "2.4", "P");
            // è®¾ç½®MSH段的字段
            ack.getMSH().getSendingApplication().getNamespaceID().setValue("HIS");
            ack.getMSH().getSendingFacility().getNamespaceID().setValue(senderFac);
            ack.getMSH().getReceivingApplication().getNamespaceID().setValue(senderApp);
            ack.getMSH().getReceivingFacility().getNamespaceID().setValue(senderFac);
            ack.getMSH().getDateTimeOfMessage().getTimeOfAnEvent().setValue(timeOfAnEvent);
            ack.getMSH().getMessageType().getMessageType().setValue("ACK");
            ack.getMSH().getMessageType().getTriggerEvent().setValue("ACK");
            ack.getMSH().getMessageControlID().setValue(timestamp);
            ack.getMSH().getProcessingID().getProcessingID().setValue("P");
            ack.getMSH().getVersionID().getVersionID().setValue("2.4");
            // è®¾ç½®MSA段的字段
            ack.getMSA().getAcknowledgementCode().setValue("AA");
            ack.getMSA().getMessageControlID().setValue(messageControlID);
            ack.getMSA().getTextMessage().setValue("");
            // å°†ACK消息转换为字符串
            String responseString = parser.encode(ack);
            //获取两个ACK的位置
            int ack1 = responseString.indexOf("ACK", 0);
            int i1 = responseString.lastIndexOf("^ACK");
            //给两个ACK之间加上数据类型
            responseString = responseString.substring(0, ack1 + 3) + dataType + responseString.substring(i1);
            //加上开始符和结束符
            char startSymbol = 0x0B; // å¼€å§‹ç¬¦ï¼ˆ0x0B)
            char endSymbol = 0x1C;   // ç»“束符(0x1C)
            String backData = String.valueOf(startSymbol) + responseString + String.valueOf(endSymbol);
            writer.println(backData);
            //处理传来的数据
            String lineString = null;
            String dataInfo = "";
            dataInfo += oneLine + "\r\n";
            while ((lineString = reader.readLine()) != null) {
                // å¯¹èŽ·å–çš„æ•°æ®ï¼Œè¿›è¡Œæ‹¼æŽ¥
                List<String> list2 = dataExplain(lineString);
                if (!CollectionUtils.isEmpty(list2)) {
                    //key有可能重复,导致数据被覆盖,所以,往数据库保存数据的时候,用stringBuilder里的数据
                    map.put(list2.get(0).trim(), list2);
                }
                dataInfo += lineString + "\r\n";
            }
            //去掉最后一个换行
            int i = dataInfo.lastIndexOf("\r\n");
            dataInfo = dataInfo.substring(0, i);
            //打印一下收到数据时间
            SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
            String date = simpleDateFormat1.format(new Date());
            System.out.println(date + " æ”¶åˆ°æ•°æ®æ—¶é—´,内容 : " + dataInfo);
            RemoteDataSaveServiceImpl remoteDataSaveService = new RemoteDataSaveServiceImpl();
            remoteDataSaveService.dealData(map, dataInfo);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader != null) {
                    reader.close();
                }
                if (writer != null) {
                    writer.close();
                }
                if (socket != null) {
                    socket.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }
    private List<String> dataExplain(String data) {
        String[] segments = data.split("\r");
        ArrayList<String> arrayList = new ArrayList();
        // Process each segment
        for (String segment : segments) {
            // æ ¹æ® '|'进行截取
            String[] fields = segment.split("\\|");
            // éåŽ†æ•°ç»„
            for (String field : fields) {
                arrayList.add(field);
            }
        }
        return arrayList;
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/TomcatConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.web.core.config;
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatConfig {
    @Bean
    public TomcatServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers((Connector connector) -> {
            connector.setProperty("relaxedPathChars", "\"#<>[\\]^`{|}/");
            connector.setProperty("relaxedQueryChars", "\"#<>[\\]^`{|}/");
        });
        return factory;
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/webservice/PateintBaseService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.ruoyi.web.webservice;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService(name = "API_ESB_Service", // æš´éœ²æœåŠ¡åç§°
        targetNamespace = "http://webservice.web.ruoyi.com"// å‘½åç©ºé—´,一般是接口的包名倒序
)
public interface PateintBaseService {
    @WebMethod(action = "Run")
    public String Run(@WebParam(name = "MessageVersion") String MessageVersion,@WebParam(name = "MessageType") String MessageType,@WebParam(name = "Message") String Message);
}
ruoyi-admin/src/main/java/com/ruoyi/web/webservice/PstientWSConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.ruoyi.web.webservice;
import com.ruoyi.web.webservice.impl.PateintBaseServiceImpl;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.xml.ws.Endpoint;
@Configuration
public class PstientWSConfig {
    @Bean
    public ServletRegistrationBean disServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/API_ESB_Service");
        return servletRegistrationBean;
    }
    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
        return new SpringBus();
    }
    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(),new PateintBaseServiceImpl());
        endpoint.publish("");
        return endpoint;
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/webservice/impl/PateintBaseServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.ruoyi.web.webservice.impl;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.web.webservice.PateintBaseService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.jws.WebService;
import java.util.Arrays;
import java.util.List;
@WebService(serviceName = "API_ESB_Service", // ä¸ŽæŽ¥å£ä¸­æŒ‡å®šçš„name一致
        targetNamespace = "http://webservice.web.ruoyi.com", // ä¸ŽæŽ¥å£ä¸­çš„命名空间一致,一般是接口的包名倒
        endpointInterface = "com.ruoyi.web.webservice.PateintBaseService"// æŽ¥å£åœ°å€
)
@Component
@Slf4j
public class PateintBaseServiceImpl implements PateintBaseService {
    @Override
    public String Run(String MessageVersion, String MessageType, String Message) {
        log.info("患者信息: {}", Message);
        log.info("患者信息: {}", Message);
        log.info("患者信息: {}", Message);
        if (StringUtils.isNotEmpty(Message)) {
            String[] split = Message.split("\\|");
            List<String> stringList = Arrays.asList(split);
            System.out.println(stringList);
        }
        return Message;
    }
}
ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,9 +6,12 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://116.62.18.175:6002/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: hxsoft
        password: Hxerp2000
        url: jdbc:mysql://127.0.0.1:3306/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
#        url: jdbc:mysql://116.62.18.175:6002/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
#        username: hxsoft
#        password: Hxerp2000
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
ruoyi-admin/src/main/resources/application.yml
@@ -18,7 +18,7 @@
# å¼€å‘环境配置
server:
  # æœåŠ¡å™¨çš„HTTP端口,默认为8080
  port: 8080
  port: 8181
  servlet:
    # åº”用的访问路径
    context-path: /
@@ -70,8 +70,12 @@
  # redis é…ç½®
  redis:
    # åœ°å€
    host: 116.62.18.175
    host: 127.0.0.1
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
#    port: 6379
#    # åœ°å€
#    host: 116.62.18.175
#    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6020
    # æ•°æ®åº“索引
    database: 0
ruoyi-common/src/main/java/com/ruoyi/common/enums/FollowUpEnum.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.ruoyi.common.enums;
public enum FollowUpEnum {
    HZGH("ADT^A04", "患者挂号"),
    WCJZ("REF^I12", "完成接诊"),
    CFSQ("OMP^O09[NW~PH~IP]", "处方申请"),
    CFSFQR("OMP^O09[OK^SC]", "处方收费确认"),
    CFTFQR("OMP^O09[OK^DC]", "处方退费确认"),
    HZZDXXXG("ADT^A08", "患者诊断信息修改"),
    JCBGMJZ("ORU^R01[UX~CM]", "检查报告(门急诊业务)"),
    KS("MFN^Z2B", "科室"),
    BQ("MFN^Z2C", "病区"),
    XZZGXX("PMU^B01", "新增职工信息"),
    XGZGXX("PMU^B02", "修改职工信息"),
    JBZDXX("MFN^Z4A", "疾病字典信息"),
    SSZDXX("MFN^Z8A", "手术字典信息"),
    YPZDXX("MFN^Z3C", "药品字典信息"),
    HZJBXXXG("ADT^A31", "患者基本信息修改"),
    HZRY("ADT^A01", "患者入院"),
    HZQXRY("ADT^A11", "患者取消入院"),
    HZRK("ADT^A10", "患者入科"),
    HZQXRK("ADT^A32", "患者取消入科"),
    HZYCY("ADT^A16", "患者预出院"),
    QXYCY("ADT^A25", "取消预出院"),
    YZSQ("OMP^O09[NW~IP]", "医嘱申请"),
    YZZF("OMP^O09[CA~CA]", "医嘱作废"),
    YZTZ("OMP^O09[DC~DC]", "医嘱停止"),
    ZDXXXG("ADT^A08", "诊断信息修改"),
    JCBG("ORU^R01[UX~CM]", "检查报告"),
    JCSJ("ORU^R01", "检查数据"),
    JYBG("OUL^R21", "检验报告"),
    CFXZSQ("OMP^O09", "处方新增申请"),
    SHDJ("SIU^S21", "术后登记");
    private String code;
    private String desc;
    FollowUpEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }
    public static String getDescByCode(String code) {
        FollowUpEnum[] organEnums = values();
        for (int i = 0; i < organEnums.length; i++) {
            FollowUpEnum organEnum = organEnums[i];
            if (organEnum.getCode().equals(code)) {
                return organEnum.getDesc();
            }
        }
        return null;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
}
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -22,18 +22,17 @@
/**
 * spring security配置
 *
 *
 * @author ruoyi
 */
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    /**
     * è‡ªå®šä¹‰ç”¨æˆ·è®¤è¯é€»è¾‘
     */
    @Autowired
    private UserDetailsService userDetailsService;
    /**
     * è®¤è¯å¤±è´¥å¤„理类
     */
@@ -51,7 +50,7 @@
     */
    @Autowired
    private JwtAuthenticationTokenFilter authenticationTokenFilter;
    /**
     * è·¨åŸŸè¿‡æ»¤å™¨
     */
@@ -72,8 +71,7 @@
     */
    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception
    {
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
@@ -93,8 +91,7 @@
     * authenticated       |   ç”¨æˆ·ç™»å½•后可访问
     */
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception
    {
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        // æ³¨è§£æ ‡è®°å…è®¸åŒ¿åè®¿é—®çš„url
        ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();
        permitAllUrl.getUrls().forEach(url -> registry.antMatchers(url).permitAll());
@@ -111,14 +108,11 @@
                // è¿‡æ»¤è¯·æ±‚
                .authorizeRequests()
                // å¯¹äºŽç™»å½•login æ³¨å†Œregister éªŒè¯ç captchaImage å…è®¸åŒ¿åè®¿é—®
                .antMatchers("/login", "/register", "/captchaImage","/qrcode/generateStaticHtml","/qrcode/getQRcode","/qrcode/getFormDate","/chat","/system/file/admin/uploadFile").permitAll()
                .antMatchers("/login", "/register", "/captchaImage", "/qrcode/generateStaticHtml", "/qrcode/getQRcode", "/qrcode/getFormDate", "/chat", "/system/file/admin/uploadFile", "/smartor/dingtalk/sendNotification", "/patient/read/patientInfo","/socket","/API_ESB_Service","/API_ESB_Service/Run").permitAll()
                // é™æ€èµ„源,可匿名访问
                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll().antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                // é™¤ä¸Šé¢å¤–的所有请求全部需要鉴权认证
                .anyRequest().authenticated()
                .and()
                .headers().frameOptions().disable();
                .anyRequest().authenticated().and().headers().frameOptions().disable();
        // æ·»åŠ Logout filter
        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
        // æ·»åŠ JWT filter
@@ -132,8 +126,7 @@
     * å¼ºæ•£åˆ—哈希加密实现
     */
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder()
    {
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
@@ -141,8 +134,7 @@
     * èº«ä»½è®¤è¯æŽ¥å£
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception
    {
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EquipmentinfoServiceImpl.java
@@ -117,7 +117,7 @@
            DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
            //设置发送内容
            dingTalkReqVo.setContents(null);
            dingTalkReqVo.setDeptId(reportReqVo.getDealDeptID());
            dingTalkReqVo.setDeptId(Long.valueOf(reportReqVo.getDealDeptID()));
            dingTalkReqVo.setUserId(reportReqVo.getDealPersionDingNO());
            aBoolean = dingTalkService.sendNotification(dingTalkReqVo);
        }
smartor/src/main/java/com/smartor/domain/DingTalkReqVo.java
@@ -1,16 +1,12 @@
package com.smartor.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
/**
 * é’‰é’‰æ¶ˆæ¯å‘送
@@ -26,17 +22,34 @@
     * å‘送内容
     */
    @ApiModelProperty(value = "发送内容")
    private List<String> contents;
    private List<ConcurrentHashMap<String, String>> contents;
    /**
     * ç”¨æˆ·é’‰é’‰å·
     */
    @ApiModelProperty(value = "用户钉钉号")
    private String userId;
    @ApiModelProperty(value = "用户手机号")
    private String number;
    /**
     * éƒ¨é—¨ID
     */
    @ApiModelProperty(value = "部门ID")
    private String deptId;
    private Long deptId;
    /**
     * å‘送消息的标题
     */
    @ApiModelProperty(value = "发送消息的标题")
    private String title;
    /**
     * è·³è½¬url
     */
    @ApiModelProperty(value = "跳转url")
    private String url;
    /**
     * è·³è½¬url
     */
    @ApiModelProperty(value = "跳转url")
    private String userId;
}
smartor/src/main/java/com/smartor/domain/ServiceThirdData.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.smartor.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * ç¬¬ä¸‰æ–¹åŽ‚å•†æ•°æ®å¯¹è±¡ service_third_data
 *
 * @author ruoyi
 * @date 2023-10-10
 */
@Data
@ApiModel("第三方厂商数据")
public class ServiceThirdData {
    /**
     * $column.columnComment
     */
    @ApiModelProperty("$column.columnComment")
    //数据库自增改成@TableId(type = IdType.AUTO)
    private Long id;
    /**
     * æ•°æ®ç±»åž‹
     */
    @ApiModelProperty("数据类型")
    @Excel(name = "数据类型")
    private String dataType;
    /**
     * æ•°æ®ç±»åž‹è§£é‡Š
     */
    @ApiModelProperty("数据类型解释")
    @Excel(name = "数据类型解释")
    private String dataTypeExplain;
    /**
     * æ•°æ®å­˜å‚¨
     */
    @ApiModelProperty("数据存储")
    @Excel(name = "数据存储")
    private String dataInfo;
    /**
     * åނ商
     */
    @ApiModelProperty("厂商")
    @Excel(name = "厂商")
    private String factory;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * æ•°æ®æ˜¯å¦å¤„理1:0未处理,1已处理
     */
    @ApiModelProperty("数据是否处理1:0未处理,1已处理")
    @Excel(name = "数据是否处理1:0未处理,1已处理")
    private Integer isDeal;
}
smartor/src/main/java/com/smartor/mapper/ServiceThirdDataMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.smartor.mapper;
import com.smartor.domain.ServiceThirdData;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * ç¬¬ä¸‰æ–¹åŽ‚å•†æ•°æ®Mapper接口
 *
 * @author ruoyi
 * @date 2023-10-10
 */
@Mapper
public interface ServiceThirdDataMapper {
    /**
     * æŸ¥è¯¢ç¬¬ä¸‰æ–¹åŽ‚å•†æ•°æ®åˆ—è¡¨
     *
     * @param serviceThirdData ç¬¬ä¸‰æ–¹åŽ‚å•†æ•°æ®
     * @return ç¬¬ä¸‰æ–¹åŽ‚å•†æ•°æ®é›†åˆ
     */
    public List<ServiceThirdData> selectServiceThirdDataList(ServiceThirdData serviceThirdData);
    /**
     * æ–°å¢žçŸ­ä¿¡å‚æ•°
     *
     * @param serviceThirdData çŸ­ä¿¡å‚æ•°
     * @return ç»“æžœ
     */
    public int insertThirdData(ServiceThirdData serviceThirdData);
}
smartor/src/main/java/com/smartor/service/IServiceThirdDataService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.smartor.service;
import java.util.List;
import com.smartor.domain.ServiceThirdData;
/**
 * ç¬¬ä¸‰æ–¹åŽ‚å•†æ•°æ®Service接口
 *
 * @author ruoyi
 * @date 2023-10-10
 */
public interface IServiceThirdDataService {
    /**
     * æŸ¥è¯¢ç¬¬ä¸‰æ–¹åŽ‚å•†æ•°æ®åˆ—è¡¨
     *
     * @param serviceThirdData ç¬¬ä¸‰æ–¹åŽ‚å•†æ•°æ®
     * @return ç¬¬ä¸‰æ–¹åŽ‚å•†æ•°æ®é›†åˆ
     */
    public List<ServiceThirdData> queryList(ServiceThirdData serviceThirdData);
}
smartor/src/main/java/com/smartor/service/RemoteDataSaveService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package com.smartor.service;
import java.util.List;
import java.util.Map;
/**
 * è¿œç¨‹æ•°æ®ä¿å­˜æŽ¥å£
 *
 * @author ls
 * @date 2023-10-10
 */
public interface RemoteDataSaveService {
    public void dealData(Map<String, List> map, String dataInfo);
    /**
     * æ‚£è€…基本信息
     *
     * @param map
     * @return æ‚£è€…基本信息
     */
    public Boolean patientInfo(Map<String, List> map);
    /**
     * æ‚£è€…基本信息修改
     *
     * @param map
     * @return
     */
    public Boolean patientInfoEdit(Map<String, List> map);
    /**
     * æ‚£è€…入院
     *
     * @param map
     * @return
     */
    public Boolean patientHospitalized(Map<String, List> map);
}
smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java
@@ -7,12 +7,14 @@
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
import com.dingtalk.api.request.OapiUserListidRequest;
import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
import com.dingtalk.api.response.OapiUserListidResponse;
import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
import com.ruoyi.common.utils.StringUtils;
import com.smartor.domain.DingTalkReqVo;
import com.smartor.service.DingTalkService;
import com.smartor.service.IntelligenceCenterService;
import com.taobao.api.ApiException;
import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Value;
@@ -20,7 +22,8 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * æ™ºèƒ½ä¸­å¿ƒ
 *
@@ -40,61 +43,85 @@
    @Override
    public Boolean sendNotification(DingTalkReqVo dingTalkReqVo) {
        String body = null;
        List<String> userIdlist = new ArrayList();
        Boolean result = false;
        log.info("发送钉钉通知");
        String accessToken = null;
        try {
            accessToken = getAccessToken();
        } catch (ApiException e) {
            e.printStackTrace();
        }
        DingTalkClient client3 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid");
        if (StringUtils.isNotEmpty(dingTalkReqVo.getNumber())) {
            DingTalkClient clientT = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile");
            OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
            req.setMobile(dingTalkReqVo.getNumber());
            OapiV2UserGetbymobileResponse rsp = null;
            try {
                rsp = clientT.execute(req, accessToken);
                body = rsp.getBody();
                String jsonObject = JSONObject.parseObject(body).getJSONObject("result").get("userid").toString();
                userIdlist.add(jsonObject);
        OapiUserListidRequest request2 = new OapiUserListidRequest();
        request2.setDeptId(675909059L); // è®¾ç½®è¦èŽ·å–çš„éƒ¨é—¨ ID,这里以根部门为例
        // è®¾ç½®éƒ¨é—¨ ID,如果获取所有员工手机号,可以设置为根部门的 ID
        OapiUserListidResponse response2 = null;
        try {
            response2 = client3.execute(request2, accessToken);
        } catch (ApiException e) {
            e.printStackTrace();
            } catch (ApiException e) {
                e.printStackTrace();
            }
        } else {
            DingTalkClient client3 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid");
            OapiUserListidRequest request2 = new OapiUserListidRequest();
            request2.setDeptId(dingTalkReqVo.getDeptId()); // è®¾ç½®è¦èŽ·å–çš„éƒ¨é—¨ ID,这里以根部门为例675909059L
            // è®¾ç½®éƒ¨é—¨ ID,如果获取所有员工手机号,可以设置为根部门的 ID
            OapiUserListidResponse response2 = null;
            try {
                response2 = client3.execute(request2, accessToken);
            } catch (ApiException e) {
                e.printStackTrace();
            }
            body = response2.getBody();
            // è§£æžä¸ºJSONObject
            JSONObject jsonObject = JSONObject.parseObject(body);
            // æå–出JSONArray
            JSONArray jsonArray = new JSONArray(jsonObject.getJSONObject("result").getJSONArray("userid_list"));
            // å°†JSONArray转为List列表
            String str = JSONObject.toJSONString(jsonArray);
            userIdlist = JSONObject.parseObject(str, List.class);
        }
        String body = response2.getBody();
        // è§£æžä¸ºJSONObject
        JSONObject jsonObject = JSONObject.parseObject(body);
        // æå–出JSONArray
        JSONArray jsonArray = new JSONArray(jsonObject.getJSONObject("result").getJSONArray("userid_list"));
        // å°†JSONArray转为List列表
        String str = JSONObject.toJSONString(jsonArray);
        List<String> list = JSONObject.parseObject(str, List.class);
        //userid数组
        for (String urid : list) {
        for (String urid : userIdlist) {
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
            OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
            request.setUseridList(urid);
            request.setAgentId(1779052814L);
            request.setToAllUser(false);
            List<String> contents = dingTalkReqVo.getContents();
            //发送内容处理
            List<ConcurrentHashMap<String, String>> contents = dingTalkReqVo.getContents();
            ArrayList<OapiMessageCorpconversationAsyncsendV2Request.Form> objects = new ArrayList<>();
            for (int i = 0; i < contents.size(); i++) {
                OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form();
                formSeverityDesc.setKey("问题" + i);
                formSeverityDesc.setValue(contents.get(i).toString());
                objects.add(formSeverityDesc);
                ConcurrentHashMap<String, String> map = contents.get(i);
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form();
                    formSeverityDesc.setKey(entry.getKey());
                    formSeverityDesc.setValue(entry.getValue());
                    objects.add(formSeverityDesc);
                }
            }
            OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
            msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA());
            msg.getOa().setMessageUrl("https://www.baidu.com");
            msg.getOa().setPcMessageUrl("https://www.baidu.com");
            msg.getOa().setMessageUrl(dingTalkReqVo.getUrl());
            msg.getOa().setPcMessageUrl(dingTalkReqVo.getUrl());
            msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head());
            msg.getOa().getHead().setText("待办事宜");
            //   msg.getOa().getHead().setText("你在说啥呢绒顶替苛夺阿斯蒂芬阿斯蒂芬");
            msg.getOa().getHead().setBgcolor("00409eff");
            msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body());
            msg.getOa().getBody().setTitle("尊敬的 " + "AAA" + "(项目经理)");
            msg.getOa().getBody().setContent("待审批:" + "123" + "条");
            msg.getOa().getBody().setTitle(dingTalkReqVo.getTitle());
            // msg.getOa().getBody().setContent("待处理:" + "123" + "条");
            msg.getOa().getBody().setForm(objects);
            msg.setMsgtype("oa");
smartor/src/main/java/com/smartor/service/impl/RemoteDataSaveServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
package com.smartor.service.impl;
import com.github.pagehelper.util.StringUtil;
import com.ruoyi.common.enums.FollowUpEnum;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.smartor.domain.ServiceThirdData;
import com.smartor.mapper.ServiceThirdDataMapper;
import com.smartor.service.RemoteDataSaveService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.applet.AppletContext;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘Service业务层处理
 *
 * @author ruoyi
 * @date 2023-05-25
 */
@Service
public class RemoteDataSaveServiceImpl implements RemoteDataSaveService {
    /**
     * æ•°æ®å¤„理
     *
     * @param map
     */
    @Override
    public void dealData(Map<String, List> map, String dataInfo) {
        if (CollectionUtils.isEmpty(map)) {
            return;
        }
        //根据文档得知,第8个(从0开始)就是数据类型
        List msh = map.get("MSH");
        String result = msh.get(8).toString();
        //获取到最后一个“ ^ â€çš„位置,方便下面截取数据类型(就是发过来的内容是啥)
        int endIndex = result.lastIndexOf("^");
        String dataType = result.substring(0, endIndex);
        System.out.println("dataType    : " + dataType);
        ServiceThirdData serviceThirdData = new ServiceThirdData();
        serviceThirdData.setDataType(dataType);
        serviceThirdData.setDataTypeExplain(FollowUpEnum.getDescByCode(dataType));
        //此处不能用map的数据,因为有的数据的KEY可能是一样的,所以用string里的数据
        serviceThirdData.setDataInfo(dataInfo);
        serviceThirdData.setFactory("联众");
        serviceThirdData.setIsDeal(0);
        serviceThirdData.setCreateTime(new Date());
        //此处引不到sping中的mapper,只能通过上下文,去获取mapper对象
        ServiceThirdDataMapper serviceThirdDataMapper = SpringUtils.getBean(ServiceThirdDataMapper.class);
        try {
            int i = serviceThirdDataMapper.insertThirdData(serviceThirdData);
        } catch (Exception e) {
            SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
            String date = simpleDateFormat1.format(new Date());
            System.out.println(date + " æŠ¥é”™æ—¶é—´ï¼Œæœªæ’入的数据 : " + dataInfo);
            e.getMessage();
        }
//        //根据数据类型,去调用相应的方法进行数据保存(这一块先不做了,后面再做)
//        switch (dataType) {
//            case "ADT^A31":
//                //患者基本信息
//                patientInfo(map);
//                break;
//            case "ADT^A08":
//                //患者诊断信息修改/
//                patientInfoEdit(map);
//            case "ADT^A01":
//                //患者入院
//                patientHospitalized(map);
//                break;
//        }
    }
    /**
     * æ‚£è€…基本信息
     *
     * @param map
     * @return
     */
    @Override
    public Boolean patientInfo(Map<String, List> map) {
        System.out.println("patientInfo患者基本信息  :  " + map);
        return null;
    }
    /**
     * æ‚£è€…诊断信息修改
     *
     * @param map
     * @return
     */
    @Override
    public Boolean patientInfoEdit(Map<String, List> map) {
        System.out.println("patientInfoEdit患者诊断信息修改  :  " + map);
        return null;
    }
    /**
     * æ‚£è€…入院
     *
     * @param map
     * @return
     */
    @Override
    public Boolean patientHospitalized(Map<String, List> map) {
        System.out.println("patientHospitalized患者入院  :  " + map);
        return null;
    }
}
smartor/src/main/java/com/smartor/service/impl/ServiceThirdDataServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.smartor.service.impl;
import java.util.List;
import com.smartor.domain.ServiceThirdData;
import com.smartor.service.IServiceThirdDataService;
import org.springframework.stereotype.Service;
/**
 * ç¬¬ä¸‰æ–¹åŽ‚å•†æ•°æ®Service业务层处理
 *
 * @author ruoyi
 * @date 2023-10-10
 */
@Service
public class ServiceThirdDataServiceImpl implements IServiceThirdDataService {
    @Override
    public List<ServiceThirdData> queryList(ServiceThirdData serviceThirdData) {
        return null;
    }
}
smartor/src/main/resources/mapper/smartor/ServiceThirdDataMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smartor.mapper.ServiceThirdDataMapper">
    <resultMap type="com.smartor.domain.ServiceThirdData" id="ServiceThirdDataResult">
        <result property="id" column="id"/>
        <result property="dataType" column="data_type"/>
        <result property="dataTypeExplain" column="data_tepe_explain"/>
        <result property="dataInfo" column="data_info"/>
        <result property="factory" column="factory"/>
        <result property="createTime" column="create_time"/>
        <result property="isDeal" column="is_deal"/>
    </resultMap>
    <sql id="selectServiceThirdDataVo">
        select id, data_type, data_type_explain, data_info, factory, create_time, is_deal
        from service_third_data
    </sql>
    <select id="selectServiceThirdDataList" parameterType="com.smartor.domain.ServiceThirdData"
            resultMap="ServiceThirdDataResult">
        <include refid="selectServiceThirdDataVo"/>
        <where>
            <if test="dataType != null  and dataType != ''">and data_type = #{dataType}</if>
            <if test="dataTypeExplain != null  and dataTypeExplain != ''">and data_type_explain = #{dataTypeExplain}
            </if>
            <if test="dataInfo != null  and dataInfo != ''">and data_info = #{dataInfo}</if>
            <if test="factory != null  and factory != ''">and factory = #{factory}</if>
            <if test="isDeal != null">and is_deal = #{isDeal}</if>
        </where>
    </select>
    <insert id="insertThirdData" parameterType="com.smartor.domain.ServiceThirdData">
        insert into service_third_data
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="dataType != null">data_type,</if>
            <if test="dataTypeExplain != null">data_type_explain,</if>
            <if test="dataInfo != null">data_info,</if>
            <if test="factory != null">factory,</if>
            <if test="createTime != null">create_time,</if>
            <if test="isDeal != null">is_deal,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="dataType != null">#{dataType},</if>
            <if test="dataTypeExplain != null">#{dataTypeExplain},</if>
            <if test="dataInfo != null">#{dataInfo},</if>
            <if test="factory != null">#{factory},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="isDeal != null">#{isDeal}</if>
        </trim>
    </insert>
</mapper>