網(wǎng)站和管理系統(tǒng)的區(qū)別會計培訓(xùn)班要多少錢一般要學(xué)多久
前言?
在我看來多寫幾個if-else沒啥大不了的,但是就是看起來沒啥逼格,領(lǐng)導(dǎo)嫌棄。我根據(jù)開發(fā)的經(jīng)歷寫幾個不同的替代方法
一、枚舉法替代?
我先前寫了一篇文章,可以去看看。
通過枚舉替換if-else語句的解決方案_枚舉代替if else c語言-CSDN博客
二、定義接口,實現(xiàn)類
通過定義初始方法,通過添加多個實現(xiàn)類來選擇
-
接口
public interface ISoapServer {/*** 服務(wù)編碼* @return*/String getCode();/*** 服務(wù)* @param xml* @return*/String server(String xml);}
-
實現(xiàn)類
?其中一個實現(xiàn)類,其他的類似
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import us.codecraft.webmagic.selector.Html;import java.util.List;/*** @author HuangZheng* @create 2023-05-05 9:49* @description 居民信息提交服務(wù)*/
@Service
public class Soap06IstPr1 implements ISoapServer {@Autowiredprivate WebClientServer webClientServer;@Overridepublic String getCode() {return "IST-PR1";}@Overridepublic String server(String xml) {try {if (StrUtil.isBlank(xml)) {throw new BaseException("參數(shù)不能為空!");}// 要插入的業(yè)務(wù)表Patient patient = new Patient();String pid = IdUtil.fastSimpleUUID();patient.setPid(pid);// 第一步 解析參數(shù)Html requestXml = Html.create(xml);// 獲取身份證號// 1、從開頭尋找List<String> idNoList = requestXml.xpath("//personInfo/identifier/value/@value").all();// 2、從assignedPerson節(jié)點尋找List<String> tempIdNoList = requestXml.xpath("//assignedPerson/identifier/value/@value").all();idNoList.addAll(tempIdNoList);for (String s : idNoList) {if (IdcardUtil.isValidCard(s)) {patient.setIdNo(s);patient.setIdTypeCode("01");patient.setIdTypeName("身份證");// 只要能取到一個就行break;}}// 姓名final String name = requestXml.xpath("//personInfo/assignedPerson/name/@value").get();patient.setName(name);// 性別final String sexCode = requestXml.xpath("//personInfo/assignedPerson/gender/@value").get();patient.setSexCode(sexCode);ExceptionUtil.soapExcpition("1",name);ExceptionUtil.soapExcpition("2",sexCode);final String sexName = XmlReadUtil.getRangeByKey("GB/T 2261.1-2003", sexCode).getValue();patient.setSexName(sexName);// 手機號碼String telNo = requestXml.xpath("//personInfo/telecom/value/@value").get();patient.setTelNo(telNo);// 獲取地址addressString presentAddress = requestXml.xpath("//personInfo/address/text/@value").get();String presentAddrProvi = requestXml.xpath("//personInfo/address/state/@value").get();String presentAddrCity = requestXml.xpath("//personInfo/address/city/@value").get();String presentAddrCounty = requestXml.xpath("//personInfo/address/district/@value").get();String presentAddrTown = requestXml.xpath("//personInfo/address/town/@value").get();String presentAddrVillage = requestXml.xpath("//personInfo/address/street/@value").get();String presentAddrHouNo = requestXml.xpath("//personInfo/address/houseNumber/@value").get();// 存值patient.setPresentAddress(TextUtil.getStr(presentAddress, "-"));patient.setPresentAddrProvi(TextUtil.getStr(presentAddrProvi, "-"));patient.setPresentAddrCity(TextUtil.getStr(presentAddrCity, "-"));patient.setPresentAddrCounty(TextUtil.getStr(presentAddrCounty, "-"));patient.setPresentAddrTown(TextUtil.getStr(presentAddrTown, "-"));patient.setPresentAddrVillage(TextUtil.getStr(presentAddrVillage, "-"));patient.setPresentAddrHouNo(TextUtil.getStr(presentAddrHouNo, "-"));// 出生日期final String birthday = requestXml.xpath("//personInfo/assignedPerson/birthTime/@value").get();patient.setBirthday(Convert.toDate(birthday));// 婚姻狀況final String marCode = requestXml.xpath("//personInfo/assignedPerson/maritalStatusCode/@value").get();patient.setMarCode(marCode);final String marName = XmlReadUtil.getRangeByKey("GB/T 2261.2-2003", marCode).getValue();patient.setMarName(marName);// ORG_ID 通過最后的機構(gòu)名稱查詢String orgName = requestXml.xpath("//personInfo/assignedOrganization/name/@value").get();OrgMapper orgMapper = SpringUtils.getBean(OrgMapper.class);Org org = orgMapper.selectOne(new LambdaQueryWrapper<Org>().eq(Org::getManagerorgname, orgName));if (org != null) {patient.setOrgId(org.getOrgid());}else{patient.setOrgId("1");}// 批次String batchId = UUID.randomUUID(false).toString(true);patient.setBatchId(batchId);PatientMapper patientMapper = SpringUtils.getBean(PatientMapper.class);patientMapper.insert(patient);//保存通知List<String> ids = webClientServer.saveNoice(new String[][]{{"rhin:personRecordRevise",name+"居民信息發(fā)生變更"},{"rhin:personIdentifierRevise",name+"居民信息索引變更"},{"rhin:personIdentifierMerge",name+"居民信息合并"}});//檢查是否有主題訂閱,如有發(fā)送通知webClientServer.checkAndNoice(ids);return "<PersonRecordFeedResponse>\n" +" <masterIdentifer>" +TextUtil.format("<system value=\"{}\"/> \n", "") +TextUtil.format("<value value=\"{}\"/> \n", pid) +" </masterIdentifer>\n" +"</PersonRecordFeedResponse>";} catch (Exception e) {// 對象轉(zhuǎn)換為xmlreturn TextUtil.format("" +"<returnData>\n" +"\t<funCode>{}</funCode>\n" +"\t<errorCode>{}</errorCode>\n" +"\t<detail>{}</detail>\n" +"</returnData> \n", getCode(), "500", e.getCause() != null ? e.getCause() : e.getMessage());}}
}
?使用方法
public String HIPMessageServer(String action, String message) {String result ="";log.info("\n 交互服務(wù)入?yún)⑿畔? \n action:{} \n message:{}",action,message);String[] beanNamesForType = applicationContext.getBeanNamesForType(ISoapServer.class);for (String beanName : beanNamesForType) {ISoapServer soapServer = applicationContext.getBean(beanName, ISoapServer.class);if (soapServer.getCode().equals(action)) {result = soapServer.server(message);log.info("\n 交互服務(wù)出參信息: \n message:{}",result);return result;}}return result;}
三、Map+函數(shù)式接口
@Service??
public?class?GrantTypeSerive?{??public?String?redPaper(String?resourceId){??//紅包的發(fā)放方式??return?"每周末9點發(fā)放";??}??public?String?shopping(String?resourceId){??//購物券的發(fā)放方式??return?"每周三9點發(fā)放";??}??public?String?QQVip(String?resourceId){??//qq會員的發(fā)放方式??return?"每周一0點開始秒殺";??}??
}?
@Service??
public?class?QueryGrantTypeService?{??@Autowired??private?GrantTypeSerive?grantTypeSerive;??private?Map<String,?Function<String,String>>?grantTypeMap=new?HashMap<>();??/**??*??初始化業(yè)務(wù)分派邏輯,代替了if-else部分??*??key:?優(yōu)惠券類型??*??value:?lambda表達式,最終會獲得該優(yōu)惠券的發(fā)放方式??*/??@PostConstruct??public?void?dispatcherInit(){??grantTypeMap.put("紅包",resourceId->grantTypeSerive.redPaper(resourceId));??grantTypeMap.put("購物券",resourceId->grantTypeSerive.shopping(resourceId));??grantTypeMap.put("qq會員",resourceId->grantTypeSerive.QQVip(resourceId));??}??public?String?getResult(String?resourceType){??//Controller根據(jù)?優(yōu)惠券類型resourceType、編碼resourceId?去查詢?發(fā)放方式grantType??Function<String,String>?result=getGrantTypeMap.get(resourceType);??if(result!=null){??//傳入resourceId?執(zhí)行這段表達式獲得String型的grantType??return?result.apply(resourceId);??}??return?"查詢不到該優(yōu)惠券的發(fā)放方式";??}??
}