| 
					
				 | 
			
			
				@ -6,9 +6,11 @@ import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.wx.BasePatientWechatDo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.wx.WxPayLogDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.wx.WxWechatDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.hospital.mapping.DoctorMappingDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.order.BusinessOrderDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.order.BusinessOrderRefundDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.hospital.mapping.dao.DoctorMappingDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.hospital.ykyy.service.YkyyService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.order.dao.BusinessOrderDao; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -21,6 +23,7 @@ import com.yihu.jw.rm.patient.PatientRequestMapping; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.util.common.XMLUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.util.date.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.util.wechat.WeiXinPayUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.util.wechat.wxhttp.HttpUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.utils.StringUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.wechat.dao.BasePatientWechatDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.wechat.dao.WechatDao; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -29,6 +32,7 @@ import com.yihu.jw.wechat.service.WxPayLogService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.commons.collections.map.HashedMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.checkerframework.checker.units.qual.A; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.json.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Service; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -61,6 +65,8 @@ public class BusinessOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private YkyyService ykyyService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private DoctorMappingDao doctorMappingDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private WlyyHospitalSysDictDao hospitalSysDictDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -77,7 +83,7 @@ public class BusinessOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String patient = businessOrderDO.getPatient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        BasePatientDO basePatientDO = patientDao.findById(patient); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String orderNo = businessOrderDO.getOrderNo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String patientId = basePatientDO.getUserId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String patientId = basePatientDO.getYktId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String orderAmout = businessOrderDO.getPayPrice().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String description = businessOrderDO.getDescription(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String state = businessOrderDO.getStatus().toString(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -99,6 +105,7 @@ public class BusinessOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @throws Exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Map<String, Object> saveOrderAndPay(BusinessOrderDO businessOrderDO,String wechatId) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        businessOrderDO.setStatus(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        businessOrderDO.setCreateTime(new Date()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -114,13 +121,10 @@ public class BusinessOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(wxWechatDO==null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new Exception("can't find wechat:the wxId is "+wechatId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String url = wxWechatDO.getBaseUrl(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String notifyUrl =url+"/ykyy"+BaseHospitalRequestMapping.WxPay.Notify; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String,Object> map = unifiedorder(wechatId,businessOrderDO.getDescription(),businessOrderDO.getPayPrice().toString(),WeChatConfig.TRADE_TYPE_JSAPI,openId,businessOrderDO.getOrderNo(),notifyUrl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String patient = businessOrderDO.getPatient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        BasePatientDO basePatientDO = patientDao.findById(patient); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String orderNo = businessOrderDO.getOrderNo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String patientId = basePatientDO.getUserId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String patientId = basePatientDO.getYktId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String orderAmout = businessOrderDO.getPayPrice().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String description = businessOrderDO.getDescription(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String state = businessOrderDO.getStatus().toString(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -131,7 +135,14 @@ public class BusinessOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String orderCatagrate = businessOrderDO.getOrderCategory(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String pcCallBack=businessOrderDO.getPcCallbackUrl(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String appCallBack = businessOrderDO.getAppCallbackUrl(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ykyyService.addYktOrder(orderNo,patientId,orderAmout,description,state,orderType,doctorMappingDO.getMappingCode(),payType,null,patientTel,orderCatagrate,pcCallBack,appCallBack); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String url = wxWechatDO.getBaseUrl(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String notifyUrl =url+"/ykyy"+BaseHospitalRequestMapping.WxPay.Notify; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String,Object> map = unifiedorder(wechatId,description,businessOrderDO.getPayPrice().toString(),WeChatConfig.TRADE_TYPE_JSAPI,openId,orderNo,notifyUrl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String doctorId = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (doctorMappingDO!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            doctorId = doctorMappingDO.getMappingCode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ykyyService.addYktOrder(orderNo,patientId,orderAmout,description,state,orderType,doctorId,payType,null,patientTel,orderCatagrate,pcCallBack,appCallBack); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -165,6 +176,32 @@ public class BusinessOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Map<String,Object> selectOrderByRelationCode(String relationCode,String wechatId) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        WxWechatDO wxWechatDO = wechatDao.findById(wechatId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        BusinessOrderDO businessOrderDO = businessOrderDao.selectByRelationCode(relationCode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String body = businessOrderDO.getDescription(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<WlyyHospitalSysDictDO> hospitalSysDictDOS = hospitalSysDictDao.findByDictName("WX_MONEY"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String totalFee = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (hospitalSysDictDOS!=null&&hospitalSysDictDOS.size()!=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            totalFee= hospitalSysDictDOS.get(0).getDictValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String patient = businessOrderDO.getPatient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String openid = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNoneBlank(patient)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<BasePatientWechatDo> patientWechatDo = patientWechatDao.findByWechatIdAndPatientId(wechatId,patient); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (patientWechatDo!=null&&patientWechatDo.size()!=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                openid = patientWechatDo.get(0).getOpenid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String ourTradeNo = businessOrderDO.getOrderNo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String url = wxWechatDO.getBaseUrl(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String notifyUrl =url+"/ykyy"+BaseHospitalRequestMapping.WxPay.Notify; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String,Object> map = unifiedorder(wechatId,body,totalFee,WeChatConfig.TRADE_TYPE_JSAPI,openid,ourTradeNo,notifyUrl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 微信下单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param wechatId 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -177,7 +214,8 @@ public class BusinessOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @throws Exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Map<String,Object> unifiedorder(String wechatId,String body,String totalFee,String tradeType,String openId,String ourTradeNo,String notifyUrl) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public  Map<String,Object> unifiedorder(String wechatId,String body,String totalFee,String tradeType,String openId,String ourTradeNo,String notifyUrl) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        WxWechatDO wxWechatDO = wechatDao.findById(wechatId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(wxWechatDO==null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new Exception("can't find wechat:the wxId is "+wechatId); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -207,8 +245,21 @@ public class BusinessOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("notify_url",notifyUrl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("trade_type", tradeType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("openid", openId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      /*  String token_url = "https://api.weixin.qq.com/cgi-bin/token"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String params = "grant_type=client_credential&appid=" + wxWechatDO.getAppId() + "&secret=" + wxWechatDO.getAppSecret(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String result = HttpUtil.sendGet(token_url, params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject json = new JSONObject(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (json.has("access_token")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String token = json.get("access_token").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String expires_in = json.get("expires_in").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String openidList_url = "https://api.weixin.qq.com/cgi-bin/user/get"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String params1 ="access_token="+ token +"&next_openid="; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String result1 = HttpUtil.sendGet(openidList_url, params1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            JSONObject json1 = new JSONObject(result1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String, Object> pay = unifiedorder(map, wxWechatDO.getAppKey()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String returnCode = pay.get("return_code").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (returnCode.equalsIgnoreCase("SUCCESS")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String appid = pay.get("appid").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String mchId = pay.get("mch_id").toString(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -406,7 +457,7 @@ public class BusinessOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        BusinessOrderDO businessOrderDO = businessOrderDao.selectByOrderNo(orderNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String patient = businessOrderDO.getPatient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        BasePatientDO basePatientDO = patientDao.findById(patient); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String patientId = basePatientDO.getUserId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String patientId = basePatientDO.getYktId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String orderAmout = businessOrderDO.getPayPrice().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String description = businessOrderDO.getDescription(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String state = businessOrderDO.getStatus().toString(); 
			 |