|  | @@ -1,136 +0,0 @@
 | 
	
		
			
				|  |  | -package thyyxxk.webserver.service.mzpayqrcode;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import com.alibaba.fastjson.JSONArray;
 | 
	
		
			
				|  |  | -import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  | -import lombok.extern.slf4j.Slf4j;
 | 
	
		
			
				|  |  | -import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | -import org.springframework.beans.factory.annotation.Value;
 | 
	
		
			
				|  |  | -import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | -import org.springframework.web.client.RestTemplate;
 | 
	
		
			
				|  |  | -import thyyxxk.webserver.config.exception.ExceptionEnum;
 | 
	
		
			
				|  |  | -import thyyxxk.webserver.constants.Capacity;
 | 
	
		
			
				|  |  | -import thyyxxk.webserver.dao.his.outpatient.MzPayQrcodeDao;
 | 
	
		
			
				|  |  | -import thyyxxk.webserver.entity.ResultVo;
 | 
	
		
			
				|  |  | -import thyyxxk.webserver.entity.mzpayqrcode.PatInfo;
 | 
	
		
			
				|  |  | -import thyyxxk.webserver.entity.mzpayqrcode.RoughIndex;
 | 
	
		
			
				|  |  | -import thyyxxk.webserver.service.externalhttp.ThmzSystem;
 | 
	
		
			
				|  |  | -import thyyxxk.webserver.utils.*;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import java.util.HashMap;
 | 
	
		
			
				|  |  | -import java.util.List;
 | 
	
		
			
				|  |  | -import java.util.Map;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/**
 | 
	
		
			
				|  |  | - * @author dj
 | 
	
		
			
				|  |  | - */
 | 
	
		
			
				|  |  | -@Slf4j
 | 
	
		
			
				|  |  | -@Service
 | 
	
		
			
				|  |  | -public class MzPayQrcodeService {
 | 
	
		
			
				|  |  | -    private final MzPayQrcodeDao dao;
 | 
	
		
			
				|  |  | -    private static final String MZ_PAY_QRCODE_URL = "http://192.168.200.3/wxserver/wxApi/genMzPayQrcode";
 | 
	
		
			
				|  |  | -    private static final int MIN_PATIENT_ID_LENGTH = 7;
 | 
	
		
			
				|  |  | -    private final ThmzSystem thmz;
 | 
	
		
			
				|  |  | -    @Value("${thmz-api-url}")
 | 
	
		
			
				|  |  | -    private String thmzApiUrl;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  | -    public MzPayQrcodeService(MzPayQrcodeDao dao, ThmzSystem thmz) {
 | 
	
		
			
				|  |  | -        this.dao = dao;
 | 
	
		
			
				|  |  | -        this.thmz = thmz;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    private PatInfo getPatientInfo(String patientId) {
 | 
	
		
			
				|  |  | -        String socialNo = dao.selectSocialNoByPatientId(patientId);
 | 
	
		
			
				|  |  | -        JSONObject obj = new JSONObject();
 | 
	
		
			
				|  |  | -        obj.put("patIdType", 11);
 | 
	
		
			
				|  |  | -        obj.put("patIdNo", socialNo);
 | 
	
		
			
				|  |  | -        return thmz.queryPatientInfo(thmzApiUrl, obj);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public ResultVo<List<Map<String, String>>> getRoughList(String patientId) {
 | 
	
		
			
				|  |  | -        if (null == patientId || patientId.length() < MIN_PATIENT_ID_LENGTH) {
 | 
	
		
			
				|  |  | -            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请输入正确的门诊ID号。");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        patientId = patientId.trim();
 | 
	
		
			
				|  |  | -        JSONObject obj = new JSONObject();
 | 
	
		
			
				|  |  | -        obj.put("patCardType", 21);
 | 
	
		
			
				|  |  | -        obj.put("patCardNo", patientId);
 | 
	
		
			
				|  |  | -        obj.put("hisOrdNum", "");
 | 
	
		
			
				|  |  | -        Map<String, Object> hrgRes = thmz.getMzChargeDetailForUnPaid(thmzApiUrl, obj);
 | 
	
		
			
				|  |  | -        if (null == hrgRes) {
 | 
	
		
			
				|  |  | -            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "网络服务错误!");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if ((int) hrgRes.get("resultCode") != 0 ) {
 | 
	
		
			
				|  |  | -            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, hrgRes.get("resultMessage").toString());
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        List<Map<String, String>> list = FilterUtil.cast(hrgRes.get("data"));
 | 
	
		
			
				|  |  | -        for (Map<String, String> item : list) {
 | 
	
		
			
				|  |  | -            item.put("fixedAmt", DecimalUtil.divide(String.valueOf(item.get("totalAmt")), "100", 2));
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        return ResultVoUtil.success(list);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    @SuppressWarnings("unchecked")
 | 
	
		
			
				|  |  | -    public ResultVo<JSONObject> getDetailFees(RoughIndex param) {
 | 
	
		
			
				|  |  | -        PatInfo patInfo = getPatientInfo(param.getPatientId());
 | 
	
		
			
				|  |  | -        if (null == patInfo || null == patInfo.getResultCode() || 0 != patInfo.getResultCode()) {
 | 
	
		
			
				|  |  | -            return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, "无法获取到患者个人信息!");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        JSONObject obj = new JSONObject();
 | 
	
		
			
				|  |  | -        obj.put("patCardType", 21);
 | 
	
		
			
				|  |  | -        obj.put("patCardNo", param.getPatientId());
 | 
	
		
			
				|  |  | -        obj.put("hisOrdNum", param.getHisOrdNum());
 | 
	
		
			
				|  |  | -        Map<String, Object> hrgRes = thmz.getChargeDetailByHisOrdNum(thmzApiUrl, obj);
 | 
	
		
			
				|  |  | -        if (null == hrgRes) {
 | 
	
		
			
				|  |  | -            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "网络服务错误!");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if ((int) hrgRes.get("resultCode") != 0 ) {
 | 
	
		
			
				|  |  | -            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, hrgRes.get("resultMessage").toString());
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        List<Map<String, String>> list = FilterUtil.cast(hrgRes.get("data"));
 | 
	
		
			
				|  |  | -        JSONObject retObj = new JSONObject();
 | 
	
		
			
				|  |  | -        retObj.put("list", makeSimpleData(list));
 | 
	
		
			
				|  |  | -        RestTemplate restTemplate = new RestTemplate();
 | 
	
		
			
				|  |  | -        ResultVo<String> qrResult = restTemplate.postForObject(MZ_PAY_QRCODE_URL, param, ResultVo.class);
 | 
	
		
			
				|  |  | -        if (null == qrResult || qrResult.getCode() != ExceptionEnum.SUCCESS.getCode()) {
 | 
	
		
			
				|  |  | -            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请求微信支付二维码失败,请联系管理员。");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        retObj.put("wxQrcode", qrResult.getData());
 | 
	
		
			
				|  |  | -        return ResultVoUtil.success(retObj);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    private JSONArray makeSimpleData(List<Map<String, String>> arr) {
 | 
	
		
			
				|  |  | -        JSONArray array = new JSONArray();
 | 
	
		
			
				|  |  | -        Map<String, String> map = new HashMap<>(Capacity.DEFAULT);
 | 
	
		
			
				|  |  | -        for (Map<String, String> item : arr) {
 | 
	
		
			
				|  |  | -            final String itemType = "".equals(item.get("itemType")) ?
 | 
	
		
			
				|  |  | -                    " - " : item.get("itemType");
 | 
	
		
			
				|  |  | -            String execDeptName = "".equals(item.get("execDeptName")) ?
 | 
	
		
			
				|  |  | -                    " - " : item.get("execDeptName");
 | 
	
		
			
				|  |  | -            String execDeptAddress = "".equals(item.get("execDeptAddress")) ?
 | 
	
		
			
				|  |  | -                    " - " : item.get("execDeptAddress");
 | 
	
		
			
				|  |  | -            if ("静脉采血".equals(item.get("itemName"))) {
 | 
	
		
			
				|  |  | -                execDeptName = "急诊抽血室";
 | 
	
		
			
				|  |  | -                execDeptAddress = "门诊大楼一楼";
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            String key = itemType + "^" + execDeptName + "^" + execDeptAddress;
 | 
	
		
			
				|  |  | -            if (!map.containsKey(key)) {
 | 
	
		
			
				|  |  | -                map.put(key, String.valueOf(item.get("itemTotalFee")));
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | -                String fee = DecimalUtil.add(String.valueOf(map.get(key)), String.valueOf(item.get("itemTotalFee")));
 | 
	
		
			
				|  |  | -                map.replace(key, fee);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        for (Map.Entry<String, String> entry : map.entrySet()) {
 | 
	
		
			
				|  |  | -            String[] keys = entry.getKey().split("\\^");
 | 
	
		
			
				|  |  | -            JSONObject obj = new JSONObject();
 | 
	
		
			
				|  |  | -            obj.put("itemType", keys[0]);
 | 
	
		
			
				|  |  | -            obj.put("execDeptName", keys[1]);
 | 
	
		
			
				|  |  | -            obj.put("execDeptAddress", keys[2]);
 | 
	
		
			
				|  |  | -            obj.put("itemTotalFee", entry.getValue());
 | 
	
		
			
				|  |  | -            obj.put("fixedAmt", DecimalUtil.divide(entry.getValue(), "100", 2));
 | 
	
		
			
				|  |  | -            array.add(obj);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        return array;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 |