lighter 3 vuotta sitten
vanhempi
commit
c0eddcb7f2

+ 6 - 0
src/main/java/thyyxxk/webserver/controller/medicalinsurance/SiQueryController.java

@@ -36,6 +36,12 @@ public class SiQueryController {
         return service.getSiPatInfo(qryPsnBsInfo);
     }
 
+    @GetMapping("/fetchPsnNo")
+    public ResultVo<String> fetchPsnNo(@RequestParam("socialNo") String socialNo,
+                                       @RequestParam("admdvs") String admdvs) {
+        return service.fetchPsnNo(socialNo, admdvs);
+    }
+
     @PostMapping("/obtainBasicPersonInfo")
     public ResultVo<PsnBaseInfo> obtainBasicPersonInfo(@RequestBody QryPsnBsInfo qryPsnBsInfo) {
         return service.obtainBasicPersonInfo(qryPsnBsInfo);

+ 29 - 0
src/main/java/thyyxxk/webserver/controller/search/SearchController.java

@@ -0,0 +1,29 @@
+package thyyxxk.webserver.controller.search;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.dictionary.SearchDataParam;
+import thyyxxk.webserver.service.search.SearchService;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping("/search")
+public class SearchController {
+    private final SearchService service;
+
+    @Autowired
+    public SearchController(SearchService service) {
+        this.service = service;
+    }
+
+    @PostMapping("/execute")
+    public ResultVo<Map<String, Object>> execute(@RequestBody @Validated SearchDataParam params) {
+        return service.execute(params);
+    }
+}

+ 1 - 2
src/main/java/thyyxxk/webserver/dao/his/LoginDao.java

@@ -47,8 +47,7 @@ public interface LoginDao {
             "AND (b.dept_code=a.small_dept or b.dept_code=a.dept)")
     List<CodeName> getUserWards(@Param("code") String code);
 
-    @Select("select code='', name='全部', py_code='qb' union " +
-            "select rtrim(code) code, rtrim(name) name, rtrim(py_code) pyCode " +
+    @Select("select rtrim(code) code, rtrim(name) name, rtrim(py_code) pyCode " +
             "from zd_unit_code where code like '8%' order by code")
     List<CodeName> getAllWards();
 

+ 1 - 1
src/main/java/thyyxxk/webserver/dao/his/medicalinsurance/SiQueryDao.java

@@ -376,7 +376,7 @@ public interface SiQueryDao {
     @Select("select name,code='' from t_si_admdvs where code=#{code}")
     PureCodeName selectAdmdvsName(@Param("code") String code);
 
-    @Select("select max(account_date) from zy_ledger_file where inpatient_no=#{patNo} and admiss_times=#{times}")
+    @Select("select max(account_date) from zy_ledger_file where inpatient_no=#{patNo} and admiss_times=#{times} and ledger_sn>0")
     Date selectMaxLedgerAccountDate(@Param("patNo") String patNo,
                                     @Param("times") int times);
 

+ 24 - 0
src/main/java/thyyxxk/webserver/dao/his/search/SearchDao.java

@@ -0,0 +1,24 @@
+package thyyxxk.webserver.dao.his.search;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import thyyxxk.webserver.entity.dictionary.PureCodeName;
+
+
+@Mapper
+public interface SearchDao {
+    @Select("select rtrim(code) as code,rtrim(name) name from a_employee_mi where isnull(del_flag,0)!=1 and ${method} like #{content}")
+    IPage<PureCodeName> searchPhysician(IPage<PureCodeName> iPage, @Param("method") String method, @Param("content") String content);
+
+    @Select("select diagnosis_code as code, diagnosis_name as name from t_si_dl_dss_dns where ${method} like #{content}")
+    IPage<PureCodeName> searchDiagnose(IPage<PureCodeName> iPage, @Param("method") String method, @Param("content") String content);
+
+    @Select("select distinct new_code as code,new_name as name from ${tableName} where new_name like #{content}")
+    IPage<PureCodeName> selectSlwSpcDiag(IPage<PureCodeName> iPage, @Param("content") String content, @Param("tableName") String tableName);
+
+    @Select("select code,name from t_zd_injury_icd where ${method} like #{content}")
+    IPage<PureCodeName> searchInjurydiag(IPage<PureCodeName> iPage, @Param("method") String method, @Param("content") String content);
+
+}

+ 10 - 0
src/main/java/thyyxxk/webserver/entity/yibao/patient/Overview.java

@@ -1,6 +1,7 @@
 package thyyxxk.webserver.entity.yibao.patient;
 
 import lombok.Data;
+import thyyxxk.webserver.utils.StringUtil;
 
 import java.util.Date;
 
@@ -25,4 +26,13 @@ public class Overview {
     private Boolean midSetl;
     private Date begntime;
     private Date endtime;
+
+    private Integer status;
+
+    public Integer getStatus() {
+        if (StringUtil.notBlank(mdtrtId) || StringUtil.notBlank(injurySerialNo)) {
+            return 1;
+        }
+        return 0;
+    }
 }

+ 43 - 17
src/main/java/thyyxxk/webserver/service/medicalinsurance/SiQueryService.java

@@ -64,6 +64,39 @@ public class SiQueryService {
         return ResultVoUtil.success(siPatInfo);
     }
 
+    public ResultVo<String> fetchPsnNo(String socialNo, String admdvs) {
+        if (StringUtil.isBlank(socialNo)) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "患者的身份证不能为空,请补充!");
+        }
+        if (StringUtil.isBlank(admdvs)) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "患者的参保地区不能为空,请补充!");
+        }
+        JSONObject input = exec.makeTradeHeaderWithInsureArea(SiFunction.OBTAIN_BASIC_PERSON_INFO, admdvs);
+        JSONObject data = new JSONObject();
+        data.put("mdtrt_cert_type", MdtrtCertType.RESIDENT_IDENTITY_CARD.getCode());
+        data.put("psn_cert_type", "01");
+        data.put("mdtrt_cert_no", socialNo);
+        data.put("certno", socialNo);
+        input.getJSONObject("input").put("data", data);
+        JSONObject result = exec.executeTrade(input, SiFunction.OBTAIN_BASIC_PERSON_INFO);
+        log.info("【操作员:{}】,人员基本信息获取:\n参数:{},\n结果:{}", TokenUtil.getTokenUserId(), input, result);
+        if (null == result) {
+            return ResultVoUtil.fail(ExceptionEnum.NETWORK_ERROR);
+        }
+        if (null == result.getInteger(RESULT_CODE)) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "医保中心报错:" + result.getString("message"));
+        }
+        if (result.getIntValue(RESULT_CODE) == 0) {
+            JSONObject output = result.getJSONObject(OUTPUT);
+            JSONObject baseinfo = output.getJSONObject("baseinfo");
+            String psnNo = baseinfo.getString("psn_no");
+            if (StringUtil.notBlank(psnNo)) {
+                return ResultVoUtil.success(psnNo);
+            }
+        }
+        return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "无法查询到患者的医保个人编码。");
+    }
+
     public ResultVo<PsnBaseInfo> obtainBasicPersonInfo(QryPsnBsInfo qryPsnBsInfo) {
         if (null == qryPsnBsInfo.getOnlyQry() && StringUtil.isBlank(qryPsnBsInfo.getMedType())) {
             return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "请选择患者的医疗类别!");
@@ -178,20 +211,7 @@ public class SiQueryService {
                         info.setCvlservFlagName("否");
                     }
                 }
-                if (null != info.getInsuplcAdmdvs()) {
-                    String admdvsName = dao.selectRegionName(info.getInsuplcAdmdvs());
-                    if (null == admdvsName) {
-                        PureCodeName region = dao.selectAdmdvsNameAndParentName(info.getInsuplcAdmdvs());
-                        if (null == region) {
-                            region = dao.selectAdmdvsName(info.getInsuplcAdmdvs());
-                            if (null == region) {
-                                region = dao.selectAdmdvsNameAndParentName(info.getInsuplcAdmdvs().substring(0, 4) + "00");
-                            }
-                        }
-                        admdvsName = region.getName();
-                    }
-                    info.setInsuplcAdmdvsName(admdvsName);
-                }
+                info.setInsuplcAdmdvsName(redis.getRegionName(info.getInsuplcAdmdvs()));
                 list.add(info);
             }
             psnBaseinfo.setInsuinfo(list);
@@ -765,8 +785,7 @@ public class SiQueryService {
     }
 
     public ResultVo<List<PsnFixMedin>> queryPersonnelAssignmentInfo(BscQryPrm q) {
-        JSONObject input = exec.makeTradeHeaderWithInsureArea(SiFunction.QUERY_PERSONNEL_ASSIGNMENT_INFO,
-                dao.selectAdmdvs(q.getPatNo(), q.getTimes()));
+        JSONObject input = exec.makeTradeHeaderWithInsureArea(SiFunction.QUERY_PERSONNEL_ASSIGNMENT_INFO, q.getAdmdvs());
         JSONObject data = new JSONObject();
         data.put("psn_no", q.getPsnNo());
         data.put("biz_appy_type", q.getBizAppyType());
@@ -1558,7 +1577,14 @@ public class SiQueryService {
     public ResultVo<List<SiSetlinfo>> selectSetldetailStatistics(SetlCondition condition) {
         String begntime = condition.getMonth() + "-01 00:00:00.000";
         String endtime = DateUtil.getMonthEndtime(condition.getMonth());
-        String insuplcAdmdvs = condition.getInsuplcAdmdvs().substring(0, 4) + "%";
+        String insuplcAdmdvs;
+        if (condition.getAdmdvsType() == 5) {
+            insuplcAdmdvs = "430121";
+        } else if (condition.getAdmdvsType() == 6) {
+            insuplcAdmdvs = "430181";
+        } else {
+            insuplcAdmdvs = condition.getInsuplcAdmdvs().substring(0, 4) + "%";
+        }
         String insutype = condition.getInsutype();
         if (StringUtil.isBlank(insutype)) {
             insutype = "%%";

+ 3 - 0
src/main/java/thyyxxk/webserver/service/redislike/RedisLikeService.java

@@ -44,6 +44,9 @@ public class RedisLikeService {
     }
 
     public String getRegionName(String code) {
+        if (StringUtil.isBlank(code)) {
+            return null;
+        }
         String regionName = regionMap.get(code);
         if (null == regionName) {
             PureCodeName region = dao.selectAdmdvsNameAndParentName(code);

+ 110 - 0
src/main/java/thyyxxk/webserver/service/search/SearchService.java

@@ -0,0 +1,110 @@
+package thyyxxk.webserver.service.search;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import thyyxxk.webserver.config.exception.ExceptionEnum;
+import thyyxxk.webserver.dao.his.search.SearchDao;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.dictionary.PureCodeName;
+import thyyxxk.webserver.entity.dictionary.SearchDataParam;
+import thyyxxk.webserver.utils.ResultVoUtil;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+public class SearchService {
+    private final SearchDao dao;
+
+    @Autowired
+    public SearchService(SearchDao dao) {
+        this.dao = dao;
+    }
+
+    public ResultVo<Map<String, Object>> execute(SearchDataParam params) {
+        IPage<PureCodeName> iPage = new Page<>(params.getPage(), 10);
+        switch (params.getTarget()) {
+            case "physician":
+                iPage = deepinPhysician(params.getMethod(), params.getContent(), iPage);
+                break;
+            case "diag":
+                iPage = deepinDiag(params.getMethod(), params.getContent(), iPage);
+                break;
+            case "slwspcdiag":
+                iPage = deepinSlwSpcDiag(params.getContent(), params.getPerstype(), iPage);
+                break;
+            case "injurydiag":
+                iPage = deepinInjuryDiag(params.getMethod(), params.getContent(), iPage);
+                break;
+        }
+        if (iPage.getTotal() > 0) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("list", iPage.getRecords());
+            map.put("totalSize", iPage.getTotal());
+            return ResultVoUtil.success(map);
+        }
+        return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
+    }
+
+    private IPage<PureCodeName> deepinPhysician(String method, String content, IPage<PureCodeName> iPage) {
+        content = '%' + content.toUpperCase() + '%';
+        String column;
+        switch (method) {
+            case "alpha":
+                column = "py_code";
+                break;
+            case "code":
+                column = "code";
+                break;
+            default:
+                column = "name";
+                break;
+        }
+        return dao.searchPhysician(iPage, column, content);
+    }
+
+    private IPage<PureCodeName> deepinDiag(String method, String content, IPage<PureCodeName> iPage) {
+        content = '%' + content.toUpperCase() + '%';
+        String column;
+        switch (method) {
+            case "alpha":
+                column = "py_code";
+                break;
+            case "code":
+                column = "diagnosis_code";
+                break;
+            default:
+                column = "diagnosis_name";
+        }
+        return dao.searchDiagnose(iPage, column, content);
+    }
+
+    private IPage<PureCodeName> deepinSlwSpcDiag(String content, Integer perstype, IPage<PureCodeName> iPage) {
+        content = "%" + content + "%";
+        if (null == perstype) {
+            perstype = 1;
+        }
+        String tableName = perstype == 1 ? "si_icd_employees_outpatient_chronic_idiopathic_disease"
+                : "si_icd_residents_outpatient_chronic_idiopathic_disease";
+        return dao.selectSlwSpcDiag(iPage, content, tableName);
+    }
+
+    private IPage<PureCodeName> deepinInjuryDiag(String method, String content, IPage<PureCodeName> iPage) {
+        content = '%' + content.toUpperCase() + '%';
+        String column;
+        switch (method) {
+            case "alpha":
+                column = "py_code";
+                break;
+            case "code":
+                column = "code";
+                break;
+            default:
+                column = "name";
+                break;
+        }
+        return dao.searchInjurydiag(iPage, column, content);
+    }
+}

+ 13 - 13
src/main/java/thyyxxk/webserver/service/yibao/DictionaryService.java

@@ -42,19 +42,6 @@ public class DictionaryService {
         return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER);
     }
 
-    private List<PureCodeName> deepinInjuryDiag(String method, String content) {
-        content = "%" + content.toUpperCase() + "%";
-        switch (method) {
-            case "alpha":
-                return dao.selectInjurydiagByAlpha(content);
-            case "code":
-                return dao.selectInjurydiagByCode(content);
-            case "name":
-                return dao.selectInjurydiagByName(content);
-        }
-        return new ArrayList<>();
-    }
-
     private List<PureCodeName> deepinPhysician(String method, String content, boolean accurateSearch) {
         content = accurateSearch ? content.toUpperCase() + '%' : '%' + content.toUpperCase() + '%';
         switch (method) {
@@ -93,6 +80,19 @@ public class DictionaryService {
         return dao.selectSlwSpcDiag(content, tableName);
     }
 
+    private List<PureCodeName> deepinInjuryDiag(String method, String content) {
+        content = "%" + content.toUpperCase() + "%";
+        switch (method) {
+            case "alpha":
+                return dao.selectInjurydiagByAlpha(content);
+            case "code":
+                return dao.selectInjurydiagByCode(content);
+            case "name":
+                return dao.selectInjurydiagByName(content);
+        }
+        return new ArrayList<>();
+    }
+
     public ResultVo<List<SpecialDiag>> getAllSpecialDiags(String medType) {
         String tableName;
         if (medType.equals("2102")) {