Selaa lähdekoodia

在线缴费新增参数

wujunjie 7 vuotta sitten
vanhempi
commit
40c4b19778

+ 22 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/charge/ChargeDao.java

@ -8,13 +8,34 @@ package com.yihu.wlyy.repository.charge;
import com.yihu.wlyy.entity.charge.WlyyCharge;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface ChargeDao extends PagingAndSortingRepository<WlyyCharge, Long>, JpaSpecificationExecutor<WlyyCharge> {
    List<WlyyCharge> findByChargeTypeAndChargeRelation(String chargeType,String chargeRelation);
    List<WlyyCharge> findByChargeTypeAndChargeRelation(String chargeType, String chargeRelation);
    /**
     * 根据签约code查询缴费成功的流水号
     *
     * @param chargeRelation
     * @return
     */
    @Query("select a from WlyyCharge a where a.chargeRelation = ?1 and a.tradeStatus = '0'")
    WlyyCharge findByChargeRelation(String chargeRelation);
    /**
     * 根据流水号更新wlyy_charge数据
     *
     * @param chargeNo
     * @return
     */
    @Modifying
    @Query("update WlyyCharge a set a.tradeStatus = '0' where a.chargeNo = ?1 ")
    WlyyCharge updateByChargeNo(String chargeNo);
    List<WlyyCharge> findByPatient(String patient, Pageable pageRequest);
}

+ 3 - 3
patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/patient/SignFamilyDao.java

@ -403,10 +403,10 @@ public interface SignFamilyDao extends PagingAndSortingRepository<SignFamily, Lo
    @Query(value = " select a.*  from wlyy_sign_family a where a.patient = ?1  and a.status = -4 and a.team_code = ?2 order by a.apply_date desc limit 0,1", nativeQuery = true)
    SignFamily findOutTimeSigningByPatientAndTeamCode(String patient,String teamCode);
    //      完成缴费后更新签约开始时间
    //      完成缴费后更新签约开始时间 缴费状态 medical_insurance_num 医保流水号
    @Modifying
    @Query("update SignFamily a set a.begin = ?2 where a.patient = ?1")
    int updatePatientBegin(String patient, Date begin);
    @Query("update SignFamily a set a.begin = ?2 ,a.medicalInsuranceNum=?3,a.expensesStatus = ?4  where a.patient = ?1 ")
    int updatePatientBegin(String patient, Date begin,String medicalInsuranceNum,String expensesStatus );
    //查询居民的扣费状态
    @Query( " select a from SignFamily a where a.patient = ?1 ")

+ 274 - 152
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/SignWebService.java

@ -1,6 +1,7 @@
package com.yihu.wlyy.service.app.sign;
import com.sun.corba.se.spi.activation.Server;
import com.yihu.wlyy.entity.charge.WlyyCharge;
import com.yihu.wlyy.entity.consult.Consult;
import com.yihu.wlyy.entity.dict.SystemDict;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
@ -9,6 +10,7 @@ import com.yihu.wlyy.entity.doctor.team.sign.DoctorTeam;
import com.yihu.wlyy.entity.doctor.team.sign.DoctorTeamMember;
import com.yihu.wlyy.entity.message.Message;
import com.yihu.wlyy.entity.patient.*;
import com.yihu.wlyy.repository.charge.ChargeDao;
import com.yihu.wlyy.repository.consult.ConsultDao;
import com.yihu.wlyy.repository.consult.ConsultTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
@ -91,6 +93,8 @@ public class SignWebService extends BaseService {
    private ConsultTeamDao consultTeamDao;
    @Autowired
    private SignFamilyServerDao signFamilyServerDao;
    @Autowired
    private ChargeDao chargeDao;
    /**
     * 根据医生代码及签约状态编码 获取该医生签约患者的信息列表
@ -149,7 +153,7 @@ public class SignWebService extends BaseService {
                "    ,b.openid" +
                "    ,a.renew_flag as renewFlag" +
                " from " +
                " ( select renew_flag,code,patient,doctor,status,id,apply_date,reason,begin,expenses_status,LENGTH(trim(ifnull(expenses_status,''))) len from wlyy_sign_family where (doctor = ? or doctor_health = ?) and status > ? and type = 2 order by begin desc ) a " +
                " ( select renew_flag,code,patient,doctor,status,id,apply_date,reason,begin,expenses_status,LENGTH(trim(ifnull(expenses_status,''))) len from wlyy_sign_family where doctor = ?  and status > ? and type = 2 order by begin desc ) a " +
                " ,wlyy_patient b " +
                " where a.patient = b.code and (a.expenses_status = '0' or a.len < 1) order by a.begin desc limit " + page * pageSize + "," + pageSize;
@ -174,7 +178,7 @@ public class SignWebService extends BaseService {
                "    ,b.openid" +
                "    ,a.renew_flag as renewFlag" +
                " from " +
                " ( select renew_flag,code,patient,doctor,status,id,apply_date,apply_unsign_date,reason,begin from wlyy_sign_family where (doctor = ? or doctor_health = ?) and ( status = ? or status = ? ) and type = 2 order by begin desc ) a " +
                " ( select renew_flag,code,patient,doctor,status,id,apply_date,apply_unsign_date,reason,begin from wlyy_sign_family where doctor = ?  and ( status = ? or status = ? ) and type = 2 order by begin desc ) a " +
                " ,wlyy_patient b " +
                " where a.patient = b.code  order by a.begin desc limit " + page * pageSize + "," + pageSize;
@ -194,10 +198,10 @@ public class SignWebService extends BaseService {
                patients = jdbcTemplate.queryForList(sql, new Object[]{doctor, 1});
                break;
            case 4:// 4已经解约
                patients = jdbcTemplate.queryForList(surrSql, new Object[]{doctor,doctor, -3, -4});
                patients = jdbcTemplate.queryForList(surrSql, new Object[]{doctor, -3, -4});
                break;
            case 5: // 未缴费
                patients = jdbcTemplate.queryForList(sqlExpenses, new Object[]{doctor,doctor,0});
                patients = jdbcTemplate.queryForList(sqlExpenses, new Object[]{doctor, 0});
        }
        return patients;
@ -412,12 +416,13 @@ public class SignWebService extends BaseService {
                adminTeam = adminTeamService.getTeam(renew.getAdminTeamId());
                doctor = doctorService.findDoctorByCode(adminTeam.getLeaderCode());
            }
            String renewCode = renew.getCode();
            if (adminTeam == null) adminTeam = new AdminTeam();
            if (doctor == null) doctor = new Doctor();
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("hospitalName", renew.getHospitalName());
            jsonObject.put("hospital", renew.getHospital());
            jsonObject.put("code", renew.getCode());
            jsonObject.put("code", renewCode);
            jsonObject.put("teamCode", renew.getTeamCode());
            jsonObject.put("begin", renew.getBegin());
            jsonObject.put("end", renew.getEnd());
@ -434,6 +439,13 @@ public class SignWebService extends BaseService {
            jsonObject.put("type", renew.getType());
            jsonObject.put("typeName", renew.getType() == 1 ? "三师签约" : "家庭签约续签");
            jsonObject.put("isRenew", "1");
            //        新增补贴类型
            jsonObject.put("expensesType", renew.getExpensesType());
//            新增缴费流水号
            WlyyCharge charge = chargeDao.findByChargeRelation(renewCode);
            if (charge != null) {
                jsonObject.put("chargeNo", charge.getChargeNo());
            }
            String statusName = "";
            switch (jsonObject.getInt("status")) {
                case -4:
@ -473,12 +485,13 @@ public class SignWebService extends BaseService {
                adminTeam = adminTeamService.getTeam(signFamily.getAdminTeamId());
                doctor = doctorService.findDoctorByCode(adminTeam.getLeaderCode());
            }
            String signCode = signFamily.getCode();
            if (adminTeam == null) adminTeam = new AdminTeam();
            if (doctor == null) doctor = new Doctor();
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("hospitalName", signFamily.getHospitalName());
            jsonObject.put("hospital", signFamily.getHospital());
            jsonObject.put("code", signFamily.getCode());
            jsonObject.put("code", signCode);
            jsonObject.put("teamCode", signFamily.getTeamCode());
            jsonObject.put("begin", signFamily.getBegin());
            jsonObject.put("end", signFamily.getEnd());
@ -494,9 +507,16 @@ public class SignWebService extends BaseService {
            jsonObject.put("createTime", signFamily.getCzrq());
            jsonObject.put("type", signFamily.getType());
            jsonObject.put("typeName", signFamily.getType() == 1 ? "三师签约" : "家庭签约");
            if(StringUtils.isNotBlank(signFamily.getRenewFlag())){
            //        新增补贴类型
            jsonObject.put("expensesType", signFamily.getExpensesType());
            //            新增缴费流水号
            WlyyCharge charge = chargeDao.findByChargeRelation(signCode);
            if (charge != null) {
                jsonObject.put("chargeNo", charge.getChargeNo());
            }
            if (StringUtils.isNotBlank(signFamily.getRenewFlag())) {
                jsonObject.put("isRenew", "1");
            }else{
            } else {
                jsonObject.put("isRenew", "0");
            }
            String statusName = "";
@ -543,13 +563,112 @@ public class SignWebService extends BaseService {
        return jsonArray;
    }
    /**
     * 根据签约code获取签约详情
     *
     * @param signCode 签约code
     * @return
     */
    public List<JSONObject> getSignInfo(String signCode) {
        List<JSONObject> jsonArray = new ArrayList<JSONObject>();
        // 直接查询签约缴费流水号 可能为空
        WlyyCharge charge = chargeDao.findByChargeRelation(signCode);
        //查询签约表数据
        SignFamily signFamily = signFamilyDao.findByCode(signCode);
        AdminTeam adminTeam = null;
        Doctor doctor = null;
        if (signFamily.getAdminTeamId() != null) {
            adminTeam = adminTeamService.getTeam(signFamily.getAdminTeamId());
            doctor = doctorService.findDoctorByCode(adminTeam.getLeaderCode());
        }
        if (adminTeam == null) adminTeam = new AdminTeam();
        if (doctor == null) doctor = new Doctor();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("hospitalName", signFamily.getHospitalName());
        jsonObject.put("hospital", signFamily.getHospital());
        jsonObject.put("code", signFamily.getCode());
        jsonObject.put("teamCode", signFamily.getTeamCode());
        jsonObject.put("begin", signFamily.getBegin());
        jsonObject.put("end", signFamily.getEnd());
        jsonObject.put("status", signFamily.getStatus());
        jsonObject.put("leader", adminTeam.getLeaderCode());
        jsonObject.put("leaderName", doctor.getName());
        jsonObject.put("doctor", signFamily.getDoctor());
        jsonObject.put("doctorHealth", signFamily.getDoctorHealth());
        jsonObject.put("doctorName", signFamily.getDoctorName());
        jsonObject.put("doctorHealthName", signFamily.getDoctorHealthName());
        jsonObject.put("expensesStatus", StringUtils.isNotBlank(signFamily.getExpensesStatus()) ? signFamily.getExpensesStatus() : "1");
        jsonObject.put("applyDate", signFamily.getApplyDate());
        jsonObject.put("createTime", signFamily.getCzrq());
        jsonObject.put("type", signFamily.getType());
        jsonObject.put("typeName", signFamily.getType() == 1 ? "三师签约" : "家庭签约");
//        新增补贴类型
        jsonObject.put("expensesType", signFamily.getExpensesType());
        if (StringUtils.isNotBlank(signFamily.getRenewFlag())) {
            jsonObject.put("isRenew", "1");
        } else {
            jsonObject.put("isRenew", "0");
        }
        String statusName = "";
        switch (jsonObject.getInt("status")) {
            case -4:
                statusName = "已到期";
                break;
            case -3:
                statusName = "已解约";
                break;
            case 0:
                statusName = "待签约";
                break;
            case 1:
                if (jsonObject.getInt("expensesStatus") == 1) {
                    statusName = "已签约";
                } else {
                    statusName = "待缴费";
                }
                break;
            case 2:
                statusName = "患者申请取消签约";
                break;
            case 3:
                statusName = "医生申请取消签约";
                break;
        }
        jsonObject.put("statusName", statusName);
//            增加支付流水号
        if (charge!=null) {
            String chargeNo = charge.getChargeNo();
            jsonObject.put("chargeNo", chargeNo);
        }
        jsonArray.add(jsonObject);
        Collections.sort(jsonArray, new Comparator<JSONObject>() {
            @Override
            public int compare(JSONObject o1, JSONObject o2) {
                Date o1Date = (Date) o1.get("createTime");
                Date o2Date = (Date) o2.get("createTime");
                if (o1Date.before(o2Date)) {
                    return 1;
                } else if (o1Date.after(o2Date)) {
                    return -1;
                }
                return 0;
            }
        });
        return jsonArray;
    }
    /**
     * 进行中的咨询获取服务团队信息
     *
     * @param teamCode
     * @param code
     * @return
     */
    public JSONObject getConsultSignInfoOrRenewInfo(String teamCode, String code,String patient,String consultCode,Integer status) {
    public JSONObject getConsultSignInfoOrRenewInfo(String teamCode, String code, String patient, String consultCode, Integer status) {
        //签约或续签参数
        String patientCode = null;
@ -562,20 +681,20 @@ public class SignWebService extends BaseService {
        if (renews == null || renews.size() == 0) {
            //再查找签约表记录
            SignFamily signFamily = null;
            if(consultCode==null){
                if(status==1){
                    signFamily = signFamilyDao.findByPatientCodeStatus(patient,status);
                }else {
            if (consultCode == null) {
                if (status == 1) {
                    signFamily = signFamilyDao.findByPatientCodeStatus(patient, status);
                } else {
                    signFamily = signFamilyDao.findOutTimeSigningByPatient(patient);
                }
            }else {
            } else {
                signFamily = signFamilyDao.findByPatient(patient);
                Consult consult = consultDao.findByCode(consultCode);
                if(signFamily==null||signFamily.getApplyDate().getTime()-consult.getCzrq().getTime()>0){
                if (signFamily == null || signFamily.getApplyDate().getTime() - consult.getCzrq().getTime() > 0) {
                    signFamily = signFamilyDao.findOutTimeSigningByPatient(patient);
                }
            }
            if(signFamily==null){
            if (signFamily == null) {
                throw new RuntimeException("找不到签约关系!");
            }
            patientCode = signFamily.getPatient();
@ -963,7 +1082,7 @@ public class SignWebService extends BaseService {
                "    ,b.sex" +
                "    ,b.openid" +
                "    ,a.czrq" +
                "    ,a.renew_flag as renewFlag "+
                "    ,a.renew_flag as renewFlag " +
                " from " +
                " ( select czrq,code,patient,doctor,status,id,apply_date,patient_apply_date,expenses_time,reason,begin,renew_flag from wlyy_sign_family_renew where doctor = ? and status = ? and type = 2" +
                " order by begin desc ) a " +
@ -990,7 +1109,7 @@ public class SignWebService extends BaseService {
                "    ,b.sex" +
                "    ,b.openid" +
                "    ,a.czrq" +
                "    ,a.renew_flag as renewFlag "+
                "    ,a.renew_flag as renewFlag " +
                " from " +
                " ( select czrq,renew_flag,code,patient,doctor,status,id,apply_date,reason,begin,expenses_status,LENGTH(trim(ifnull(expenses_status,''))) len from wlyy_sign_family_renew where doctor = ? and status > ? and type = 2 order by begin desc ) a " +
                " ,wlyy_patient b " +
@ -1016,7 +1135,7 @@ public class SignWebService extends BaseService {
                "    ,b.sex" +
                "    ,b.openid" +
                "    ,a.czrq" +
                "    ,a.renew_flag as renewFlag "+
                "    ,a.renew_flag as renewFlag " +
                " from " +
                " ( select expenses_status,czrq,code,patient,doctor,status,id,apply_date,patient_apply_date,expenses_time,reason,begin,renew_flag from wlyy_sign_family_renew where doctor = ? and status = ? and type = 2" +
                " order by begin desc ) a " +
@ -1067,7 +1186,7 @@ public class SignWebService extends BaseService {
                JSONObject json = new JSONObject();
                String patient = (String) signFamily.get("code");
                json.put("toUser", patient);
                json.put("represented",patient);//被代理人
                json.put("represented", patient);//被代理人
                json.put("keyword1", "续签家庭医生");
                json.put("keyword2", DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
                json.put("remark", "提醒医生 :" + doctorName + "\n"
@ -1079,16 +1198,16 @@ public class SignWebService extends BaseService {
                    PushMsgTask.getInstance().putWxMsg(access_token, 16, openid, name, json);
                }
                //发送代理人
                JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patient,openid);
                if(jsonArray!=null&&jsonArray.length()>0){
                JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patient, openid);
                if (jsonArray != null && jsonArray.length() > 0) {
                    Patient p = patientService.findByCode(patient);
                    for (int i = 0;i<jsonArray.length();i++){
                    for (int i = 0; i < jsonArray.length(); i++) {
                        flag = false;
                        JSONObject j  = jsonArray.getJSONObject(i);
                        JSONObject j = jsonArray.getJSONObject(i);
                        Patient member = (Patient) j.get("member");
                        JSONObject data = json;
                        data.remove("toUser");
                        data.put("toUser",member.getCode());
                        data.put("toUser", member.getCode());
                        json.put("first", weiXinOpenIdUtils.getTitleMes(p, (int) j.get("relation"), p.getName()) + "\n" +
                                name + ",您好!\n" +
                                "您的家庭医生签约将于6月30日到期,为了能继续给您提供健康服务,诚邀您续签家庭医生。");
@ -1096,7 +1215,7 @@ public class SignWebService extends BaseService {
                    }
                }
                if(flag){
                if (flag) {
                    //发送短信
                    String mobile = (String) signFamily.get("mobile");
                    if (StringUtils.isNotBlank(mobile)) {
@ -1151,10 +1270,10 @@ public class SignWebService extends BaseService {
                " wlyy_patient p " +
                " WHERE " +
                " t.patient = p. CODE " +
                " AND t.doctor = '"+doctor+"' " +
                " AND t.doctor = '" + doctor + "' " +
                " AND t.status =-4 " +
                " AND t.expenses_status = '1' " +
                " AND t.sign_year = '"+(DateUtil.getSignYear()-1)+"' " +
                " AND t.sign_year = '" + (DateUtil.getSignYear() - 1) + "' " +
                " AND NOT EXISTS ( " +
                " SELECT " +
                "  1 " +
@ -1163,7 +1282,7 @@ public class SignWebService extends BaseService {
                " WHERE " +
                "  a.patient = t.patient " +
                " AND a.status>0  " +
                " AND a.sign_year = '"+DateUtil.getSignYear()+"' " +
                " AND a.sign_year = '" + DateUtil.getSignYear() + "' " +
                ")";
        List<Map<String, Object>> signFamilies = jdbcTemplate.queryForList(sql);
@ -1177,7 +1296,7 @@ public class SignWebService extends BaseService {
                Boolean flag = true;
                String patient = (String) signFamily.get("code");
                json.put("toUser", patient);
                json.put("represented",patient);//被代理人
                json.put("represented", patient);//被代理人
                json.put("keyword1", "续签家庭医生");
                json.put("keyword2", DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
                json.put("remark", "提醒医生 :" + doctorName + "\n"
@ -1188,23 +1307,23 @@ public class SignWebService extends BaseService {
                    PushMsgTask.getInstance().putWxMsg(access_token, 16, openid, name, json);
                }
                //发送代理人
                JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patient,openid);
                if(jsonArray!=null&&jsonArray.length()>0){
                JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patient, openid);
                if (jsonArray != null && jsonArray.length() > 0) {
                    Patient p = patientService.findByCode(patient);
                    for (int i = 0;i<jsonArray.length();i++){
                    for (int i = 0; i < jsonArray.length(); i++) {
                        flag = false;
                        JSONObject j  = jsonArray.getJSONObject(i);
                        JSONObject j = jsonArray.getJSONObject(i);
                        Patient member = (Patient) j.get("member");
                        JSONObject data = json;
                        data.remove("toUser");
                        data.put("toUser",member.getCode());
                        data.put("toUser", member.getCode());
                        json.put("first", weiXinOpenIdUtils.getTitleMes(p, (int) j.get("relation"), p.getName()) + "\n" +
                                name + ",您好!\n" +
                                "您的家庭医生签约将于6月30日到期,为了能继续给您提供健康服务,诚邀您续签家庭医生。");
                        PushMsgTask.getInstance().putWxMsg(weiXinAccessTokenUtils.getAccessToken(), 16, member.getOpenid(), p.getName(), data);
                    }
                }
                if(flag){
                if (flag) {
                    //发送短信
                    String mobile = (String) signFamily.get("mobile");
                    if (StringUtils.isNotBlank(mobile)) {
@ -1252,7 +1371,7 @@ public class SignWebService extends BaseService {
                          String health,
                          String disease,
                          String custom,
                          String sevId,String healthDoctor,
                          String sevId, String healthDoctor,
                          Long teamCode,
                          String expenses) throws Exception {
@ -1273,18 +1392,18 @@ public class SignWebService extends BaseService {
                        renew.setStatus(1);
                        //1.3.3.2新增需求
                        //设置居民服务类型
                        if(StringUtils.isNotBlank(sevId)){
                            setSevId(renew,sevId);
                        if (StringUtils.isNotBlank(sevId)) {
                            setSevId(renew, sevId);
                        }
                        //1.3.3.2新增需求
                        //设置居民标签
                        signPatientLabelInfoService.setRenewPatientLabels(renew.getPatient(), health, disease,custom, renew.getDoctor(),renew.getDoctor());
                        signPatientLabelInfoService.setRenewPatientLabels(renew.getPatient(), health, disease, custom, renew.getDoctor(), renew.getDoctor());
                        //1.3.3.2设置可修改健康管理师
                        if(StringUtils.isNotBlank(healthDoctor)){
                            updateHealthDoctor(renew,healthDoctor);
                        if (StringUtils.isNotBlank(healthDoctor)) {
                            updateHealthDoctor(renew, healthDoctor);
                        }
                        //1.3.3.2设置新团队
                        if(teamCode!=null&&teamCode!=0){
                        if (teamCode != null && teamCode != 0) {
                            renew.setAdminTeamId(teamCode);
                        }
                        renew.setExpensesType(StringUtils.isEmpty(expenses) ? "01" : expenses);//收费类别
@ -1296,15 +1415,13 @@ public class SignWebService extends BaseService {
                    setRenewLog(renew);
                }
                //1.3.3.4 根据团队设置标识
                setRenewFlag(renew,teamCode);
                setRenewFlag(renew, teamCode);
                signFamilyRenewDao.save(renew);
                setMessState(mesId);
                //发送微信模板消息
                JSONObject data = new JSONObject();
                data.put("doctorName", renew.getDoctorName());
@ -1314,8 +1431,8 @@ public class SignWebService extends BaseService {
                data.put("represented", patientCode);
                data.put("toUser", patientCode);
                data.put("toName", renew.getName());
                data.put("isRenew","1");
                data.put("signState",state);
                data.put("isRenew", "1");
                data.put("signState", state);
                Patient patient = patientService.findByCode(renew.getPatient());
                if (patient != null && StringUtils.isNotBlank(patient.getOpenid())) {
@ -1333,13 +1450,13 @@ public class SignWebService extends BaseService {
                    }
                }
                //发送代理人
                JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patient.getCode(),patient.getOpenid());
                if(jsonArray!=null&&jsonArray.length()>0){
                    for (int i = 0;i<jsonArray.length();i++){
                        JSONObject j  = jsonArray.getJSONObject(i);
                JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patient.getCode(), patient.getOpenid());
                if (jsonArray != null && jsonArray.length() > 0) {
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject j = jsonArray.getJSONObject(i);
                        Patient member = (Patient) j.get("member");
                        data.remove("toUser");
                        data.put("toUser",member.getCode());
                        data.put("toUser", member.getCode());
                        //String first = (String) json.get("first");
                        if ("0".equals(state)) {
                            data.put("first", weiXinOpenIdUtils.getTitleMes(patient, (int) j.get("relation"), patient.getName()) + "\n" +
@ -1419,7 +1536,7 @@ public class SignWebService extends BaseService {
    public int agreeRenewOverDue(String access_token, String dotorCode, String patientCode, String state, Long mesId, String signYear, String signCode, String health,
                                 String disease,
                                 String custom,
                                 String sevId,String healthDoctor,
                                 String sevId, String healthDoctor,
                                 Long teamCode,
                                 String expenses) throws Exception {
@ -1441,16 +1558,16 @@ public class SignWebService extends BaseService {
                        //1.3.3.2新增需求
                        //设置居民服务类型
                        setSevId(renew,sevId);
                        setSevId(renew, sevId);
                        //1.3.3.2新增需求
                        //设置居民标签
                        signPatientLabelInfoService.setPatientLabels(renew.getPatient(), renew.getIdcard(),"", health, disease, custom, renew.getDoctor(), renew.getDoctor());
                        signPatientLabelInfoService.setPatientLabels(renew.getPatient(), renew.getIdcard(), "", health, disease, custom, renew.getDoctor(), renew.getDoctor());
                        //1.3.3.2设置可修改健康管理师
                        if(StringUtils.isNotBlank(healthDoctor)){
                            updateHealthDoctor(renew,healthDoctor);
                        if (StringUtils.isNotBlank(healthDoctor)) {
                            updateHealthDoctor(renew, healthDoctor);
                        }
                        //1.3.3.2设置新团队
                        if(teamCode!=null&&teamCode!=0){
                        if (teamCode != null && teamCode != 0) {
                            renew.setAdminTeamId(teamCode);
                        }
                        renew.setExpensesType(StringUtils.isEmpty(expenses) ? "01" : expenses);//收费类别
@ -1458,7 +1575,7 @@ public class SignWebService extends BaseService {
                }
                renew.setApplyDate(new Date());
                //1.3.3.4 根据团队设置标识
                setRenewFlag(renew,teamCode);
                setRenewFlag(renew, teamCode);
                signFamilyDao.save(renew);
                //消息设为已读
@ -1477,7 +1594,7 @@ public class SignWebService extends BaseService {
                data.put("toUser", patientCode);
                data.put("represented", patientCode);
                data.put("toName", renew.getName());
                data.put("isRenew","1");//表示为续签操作
                data.put("isRenew", "1");//表示为续签操作
                Patient patient = patientService.findByCode(renew.getPatient());
                if (patient != null && StringUtils.isNotBlank(patient.getOpenid())) {
@ -1495,13 +1612,13 @@ public class SignWebService extends BaseService {
                    }
                }
                //发送代理人
                JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patient.getCode(),patient.getOpenid());
                if(jsonArray!=null&&jsonArray.length()>0){
                    for (int i = 0;i<jsonArray.length();i++){
                        JSONObject j  = jsonArray.getJSONObject(i);
                JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patient.getCode(), patient.getOpenid());
                if (jsonArray != null && jsonArray.length() > 0) {
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject j = jsonArray.getJSONObject(i);
                        Patient member = (Patient) j.get("member");
                        data.remove("toUser");
                        data.put("toUser",member.getCode());
                        data.put("toUser", member.getCode());
                        //String first = (String) json.get("first");
                        if ("0".equals(state)) {
                            data.put("first", weiXinOpenIdUtils.getTitleMes(patient, (int) j.get("relation"), patient.getName()) + "\n" +
@ -1568,6 +1685,7 @@ public class SignWebService extends BaseService {
    /**
     * 获取年度列表
     * 团队
     *
     * @return
     */
    public JSONObject getRenewYearCount(Long teamCode) {
@ -1582,11 +1700,12 @@ public class SignWebService extends BaseService {
    /**
     * 获取年度列表
     * 团队
     *
     * @return
     */
    public JSONObject getRenewYearCountByDoctor(Long teamCode,String doctor) {
    public JSONObject getRenewYearCountByDoctor(Long teamCode, String doctor) {
        StringBuffer sql = new StringBuffer("SELECT t.sign_year labelCode,t.sign_year labelName,COUNT(1) amount " +
                "FROM  wlyy_sign_family t WHERE t.doctor ='"+doctor+"' AND  t.admin_team_code =" + teamCode + "  AND t.status=-4 AND sign_year IS NOT NULL GROUP BY t.sign_year DESC");
                "FROM  wlyy_sign_family t WHERE t.doctor ='" + doctor + "' AND  t.admin_team_code =" + teamCode + "  AND t.status=-4 AND sign_year IS NOT NULL GROUP BY t.sign_year DESC");
        List<Map<String, Object>> rs = jdbcTemplate.queryForList(sql.toString());
        JSONObject json = new JSONObject();
        json.put("result", rs);
@ -1598,13 +1717,13 @@ public class SignWebService extends BaseService {
     *
     * @return
     */
    public JSONObject getOverDuePatients(String year, Long teamCode,String doctor, Integer page, Integer pageSize) {
    public JSONObject getOverDuePatients(String year, Long teamCode, String doctor, Integer page, Integer pageSize) {
        StringBuffer sql = new StringBuffer("SELECT IFNULL(year( from_days( datediff( now(), p.birthday))),'未知') age," +
                "t.patient code,t.idcard,t.name,t.mobile,t.openid," +
                "t.ssc,t.type signType,p.sex ,t.expenses_status expensesStatus " +
                " FROM wlyy_sign_family t " +
                " LEFT JOIN wlyy_patient p ON t.patient = p.code " +
                " WHERE t.doctor ='"+doctor+"' AND t.admin_team_code =" + teamCode + " AND t.sign_year ='" + year + "' AND t.status =-4 LIMIT " + page * pageSize + "," + pageSize);
                " WHERE t.doctor ='" + doctor + "' AND t.admin_team_code =" + teamCode + " AND t.sign_year ='" + year + "' AND t.status =-4 LIMIT " + page * pageSize + "," + pageSize);
        List<Map<String, Object>> rs = jdbcTemplate.queryForList(sql.toString());
        JSONObject json = new JSONObject();
        json.put("result", rs);
@ -1725,7 +1844,7 @@ public class SignWebService extends BaseService {
        Patient p = patientService.findByCode(patientCode);
        JSONObject json = new JSONObject();
        json.put("toUser", patientCode);
        json.put("represented",patientCode);//被代理人
        json.put("represented", patientCode);//被代理人
        json.put("keyword1", "续签家庭医生");
        json.put("keyword2", DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
        json.put("remark", "提醒医生 :" + d.getName() + "\n"
@ -1743,22 +1862,22 @@ public class SignWebService extends BaseService {
        //发送代理人
        boolean flag = true;
        JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patientCode,openid);
        if(jsonArray!=null&&jsonArray.length()>0){
            for (int i = 0;i<jsonArray.length();i++){
        JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patientCode, openid);
        if (jsonArray != null && jsonArray.length() > 0) {
            for (int i = 0; i < jsonArray.length(); i++) {
                flag = false;
                JSONObject j  = jsonArray.getJSONObject(i);
                JSONObject j = jsonArray.getJSONObject(i);
                Patient member = (Patient) j.get("member");
                JSONObject data = json;
                data.remove("toUser");
                data.put("toUser",member.getCode());
                data.put("toUser", member.getCode());
                json.put("first", weiXinOpenIdUtils.getTitleMes(p, (int) j.get("relation"), p.getName()) + "\n" +
                        name + ",您好!\n" +
                        "您的家庭医生签约将于6月30日到期,为了能继续给您提供健康服务,诚邀您续签家庭医生。");
                PushMsgTask.getInstance().putWxMsg(weiXinAccessTokenUtils.getAccessToken(), 16, member.getOpenid(), p.getName(), data);
            }
        }
        if(flag){
        if (flag) {
            //发送短信
            String mobile = p.getMobile();
            if (StringUtils.isNotBlank(mobile)) {
@ -1766,7 +1885,7 @@ public class SignWebService extends BaseService {
                patientSetReminFlag(patientCode);
                return 2;
            }
        }else {
        } else {
            return 1;
        }
@ -1925,22 +2044,23 @@ public class SignWebService extends BaseService {
    /**
     * 设置服务表服务类型
     *
     * @param renew
     * @param sevId
     */
    public void setSevId(SignFamilyRenew renew, String sevId) {
        if (StringUtils.isNotBlank(sevId)){
        if (StringUtils.isNotBlank(sevId)) {
            if (StringUtils.isNotBlank(sevId)) {
                String[] sevIds = sevId.split(",");
                for(int i=0;i<sevIds.length;i++){
                    String sql = "select d.name from wlyy_sign_dict d where d.code = '" + sevIds[i] + "' and d.year ='"+DateUtil.getSignYear()+"' ";
                for (int i = 0; i < sevIds.length; i++) {
                    String sql = "select d.name from wlyy_sign_dict d where d.code = '" + sevIds[i] + "' and d.year ='" + DateUtil.getSignYear() + "' ";
                    List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
                    SignFamilyServer server = new SignFamilyServer();
                    server.setSignCode(renew.getCode());
                    server.setCreateTime(new Date());
                    server.setServerType(sevIds[i]);
                    Map<String, Object> map = list.get(0);
                    String serverName = (String)  map.get("name");
                    String serverName = (String) map.get("name");
                    server.setServerTypeName(serverName);
                    server.setCzrq(new Date());
                    signFamilyServerDao.save(server);
@ -1951,21 +2071,22 @@ public class SignWebService extends BaseService {
    /**
     * 设置签约表服务类型
     *
     * @param renew
     * @param sevId
     */
    public void setSevId(SignFamily renew, String sevId) {
        if (StringUtils.isNotBlank(sevId)) {
            String[] sevIds = sevId.split(",");
            for(int i=0;i<sevIds.length;i++){
                String sql = "select d.name from wlyy_sign_dict d where d.code = '" + sevIds[i] + "' and d.year ='"+DateUtil.getSignYear()+"' ";
            for (int i = 0; i < sevIds.length; i++) {
                String sql = "select d.name from wlyy_sign_dict d where d.code = '" + sevIds[i] + "' and d.year ='" + DateUtil.getSignYear() + "' ";
                List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
                SignFamilyServer server = new SignFamilyServer();
                server.setSignCode(renew.getCode());
                server.setCreateTime(new Date());
                server.setServerType(sevIds[i]);
                Map<String, Object> map = list.get(0);
                String serverName = (String)  map.get("name");
                String serverName = (String) map.get("name");
                server.setServerTypeName(serverName);
                server.setCzrq(new Date());
                signFamilyServerDao.save(server);
@ -1985,15 +2106,15 @@ public class SignWebService extends BaseService {
//        signFamilyRenew.setDoctorHealthName(doctor.getName());
//    }
    public int setRenewLog(SignFamilyRenew renew){
        if(renew ==null) {
    public int setRenewLog(SignFamilyRenew renew) {
        if (renew == null) {
            return -1;
        }
        String sql = "SELECT * FROM wlyy_sign_family f WHERE f.patient ='"+renew.getPatient()+"' AND (f.`status` =-4 OR f.`status`>0) AND f.expenses_status ='1' AND f.sign_year >='"+(Integer.parseInt(renew.getSignYear())-1)+"' ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        Map<String,Object> sign = null;
        if(list!=null&&list.size()>0){
        String sql = "SELECT * FROM wlyy_sign_family f WHERE f.patient ='" + renew.getPatient() + "' AND (f.`status` =-4 OR f.`status`>0) AND f.expenses_status ='1' AND f.sign_year >='" + (Integer.parseInt(renew.getSignYear()) - 1) + "' ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        Map<String, Object> sign = null;
        if (list != null && list.size() > 0) {
            sign = list.get(0);
        }
        SignFamilyRenewLog log = new SignFamilyRenewLog();
@ -2006,12 +2127,12 @@ public class SignWebService extends BaseService {
        log.setHospital(renew.getHospital());
        //存储旧签约记录
        if(sign!=null){
            Integer id =(Integer) sign.get("admin_team_code");
            log.setOldSignCode((String)sign.get("code"));
        if (sign != null) {
            Integer id = (Integer) sign.get("admin_team_code");
            log.setOldSignCode((String) sign.get("code"));
            log.setOldAdminTeamId(id.longValue());
            log.setOldHospital((String)sign.get("hospital"));
            log.setOldDoctor((String)sign.get("doctor"));
            log.setOldHospital((String) sign.get("hospital"));
            log.setOldDoctor((String) sign.get("doctor"));
        }
        log.setNeedUpload("1");
        log.setCreateTime(new Date());
@ -2020,15 +2141,15 @@ public class SignWebService extends BaseService {
        return 1;
    }
    public int setRenewLog(SignFamily renew){
        if(renew ==null) {
    public int setRenewLog(SignFamily renew) {
        if (renew == null) {
            return -1;
        }
        String sql = "SELECT * FROM wlyy_sign_family f WHERE f.patient ='"+renew.getPatient()+"' AND (f.`status` =-4 OR f.`status`>0) AND f.expenses_status ='1' AND f.sign_year >='"+(Integer.parseInt(renew.getSignYear())-1)+"' ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        Map<String,Object> sign = null;
        if(list!=null&&list.size()>0){
        String sql = "SELECT * FROM wlyy_sign_family f WHERE f.patient ='" + renew.getPatient() + "' AND (f.`status` =-4 OR f.`status`>0) AND f.expenses_status ='1' AND f.sign_year >='" + (Integer.parseInt(renew.getSignYear()) - 1) + "' ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        Map<String, Object> sign = null;
        if (list != null && list.size() > 0) {
            sign = list.get(0);
        }
        SignFamilyRenewLog log = new SignFamilyRenewLog();
@ -2041,19 +2162,19 @@ public class SignWebService extends BaseService {
        log.setHospital(renew.getHospital());
        //存储旧签约记录
        if(sign!=null){
            Integer id =(Integer) sign.get("admin_team_code");
            log.setOldSignCode((String)sign.get("code"));
        if (sign != null) {
            Integer id = (Integer) sign.get("admin_team_code");
            log.setOldSignCode((String) sign.get("code"));
            log.setOldAdminTeamId(id.longValue());
            log.setOldHospital((String)sign.get("hospital"));
            log.setOldDoctor((String)sign.get("doctor"));
            log.setOldHospital((String) sign.get("hospital"));
            log.setOldDoctor((String) sign.get("doctor"));
        }
        log.setNeedUpload("1");
        log.setCreateTime(new Date());
        log.setUpdateTime(new Date());
        //1.3.4新增字段
        log.setStatus(renew.getStatus());
        if(StringUtils.isNotBlank(renew.getRenewChangeReason())){
        if (StringUtils.isNotBlank(renew.getRenewChangeReason())) {
            log.setRenewChangeReason(renew.getRenewChangeReason());
        }
        log.setApplyDate(renew.getApplyDate());
@ -2063,18 +2184,18 @@ public class SignWebService extends BaseService {
        return 1;
    }
    public void updateHealthDoctor(SignFamilyRenew renew ,String healthDoctor){
    public void updateHealthDoctor(SignFamilyRenew renew, String healthDoctor) {
        DoctorTeam team =  doctorTeamDao.findByCode(renew.getTeamCode());
        if(StringUtils.isNotBlank(renew.getDoctorHealth())){
        DoctorTeam team = doctorTeamDao.findByCode(renew.getTeamCode());
        if (StringUtils.isNotBlank(renew.getDoctorHealth())) {
            //删除之前健管师成员
            doctorTeamMemberDao.deleteMember(renew.getDoctorHealth());
        }
        Doctor hd = doctorDao.findByCode(healthDoctor);
        if(hd==null){
            return ;
        if (hd == null) {
            return;
        }
        team.setName(renew.getDoctorName()+","+hd.getName()+","+renew.getName());
        team.setName(renew.getDoctorName() + "," + hd.getName() + "," + renew.getName());
        //新建健康管理师
        DoctorTeamMember hdmb = new DoctorTeamMember();
        hdmb.setName(hd.getName());
@ -2094,18 +2215,18 @@ public class SignWebService extends BaseService {
        renew.setDoctorHealth(hd.getCode());
    }
    public void updateHealthDoctor(SignFamily renew ,String healthDoctor){
    public void updateHealthDoctor(SignFamily renew, String healthDoctor) {
        DoctorTeam team =  doctorTeamDao.findByCode(renew.getTeamCode());
        if(StringUtils.isNotBlank(renew.getDoctorHealth())){
        DoctorTeam team = doctorTeamDao.findByCode(renew.getTeamCode());
        if (StringUtils.isNotBlank(renew.getDoctorHealth())) {
            //删除之前健管师成员
            doctorTeamMemberDao.deleteMember(renew.getDoctorHealth());
        }
        Doctor hd = doctorDao.findByCode(healthDoctor);
        if(hd==null){
            return ;
        if (hd == null) {
            return;
        }
        team.setName(renew.getDoctorName()+","+hd.getName()+","+renew.getName());
        team.setName(renew.getDoctorName() + "," + hd.getName() + "," + renew.getName());
        //新建健康管理师
        DoctorTeamMember hdmb = new DoctorTeamMember();
        hdmb.setName(hd.getName());
@ -2125,68 +2246,68 @@ public class SignWebService extends BaseService {
        renew.setDoctorHealth(hd.getCode());
    }
    public JSONArray getRenewChangeReason(){
       List<SystemDict> systemDict = systemDictService.getDictByDictName("RENEW_CHANGE_REASON");
    public JSONArray getRenewChangeReason() {
        List<SystemDict> systemDict = systemDictService.getDictByDictName("RENEW_CHANGE_REASON");
        return new JSONArray(systemDict);
    }
    public JSONObject getPatientSignLogInfo(String patient){
    public JSONObject getPatientSignLogInfo(String patient) {
        Patient p = patientService.findByCode(patient);
        if(p!=null){
        if (p != null) {
            String sql = "SELECT f.hospital_name as oldHospitalName,t.name AS oldTeamName,d.name as OldLeaderName,f.doctor_name AS OldDoctorName,f.doctor_health_name AS OldHealthDoctorName FROM wlyy_sign_family_renew_log r  " +
                    " LEFT JOIN wlyy_sign_family f ON r.old_sign_code = f.code " +
                    " LEFT JOIN wlyy_admin_team t ON r.old_admin_team_id = t.id " +
                    " LEFt JOIN wlyy_doctor d ON t.leader_code = d.code  " +
                    " WHERE r.idcard ='"+p.getIdcard()+"' AND r.sign_year='"+DateUtil.getSignYear()+"'";
            List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
            if(list!=null&&list.size()>0){
               return new JSONObject(list.get(0));
                    " WHERE r.idcard ='" + p.getIdcard() + "' AND r.sign_year='" + DateUtil.getSignYear() + "'";
            List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
            if (list != null && list.size() > 0) {
                return new JSONObject(list.get(0));
            }
        }
        return new JSONObject();
    }
    public void setRenewFlag(SignFamily renew,Long teamCode){
        if(teamCode==null){
            return ;
    public void setRenewFlag(SignFamily renew, Long teamCode) {
        if (teamCode == null) {
            return;
        }
        String sql = "SELECT * FROM wlyy_sign_family f WHERE f.patient ='"+renew.getPatient()+"' AND (f.`status` =-4 OR f.`status`>0) AND f.expenses_status ='1' AND f.sign_year >='"+(Integer.parseInt(renew.getSignYear())-1)+"' ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        Map<String,Object> sign = null;
        if(list!=null&&list.size()>0){
        String sql = "SELECT * FROM wlyy_sign_family f WHERE f.patient ='" + renew.getPatient() + "' AND (f.`status` =-4 OR f.`status`>0) AND f.expenses_status ='1' AND f.sign_year >='" + (Integer.parseInt(renew.getSignYear()) - 1) + "' ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        Map<String, Object> sign = null;
        if (list != null && list.size() > 0) {
            sign = list.get(0);
        }
        Integer i = (Integer)sign.get("admin_team_code");
        Integer i = (Integer) sign.get("admin_team_code");
        Long id = i.longValue();
        if(id==null){
        if (id == null) {
            renew.setRenewFlag("2");
        }else{
            if(id==teamCode){
        } else {
            if (id == teamCode) {
                renew.setRenewFlag("1");
            }else{
            } else {
                renew.setRenewFlag("2");
            }
        }
    }
    public void setRenewFlag(SignFamilyRenew renew,Long teamCode){
        if(teamCode==null){
            return ;
    public void setRenewFlag(SignFamilyRenew renew, Long teamCode) {
        if (teamCode == null) {
            return;
        }
        String sql = "SELECT * FROM wlyy_sign_family f WHERE f.patient ='"+renew.getPatient()+"' AND (f.`status` =-4 OR f.`status`>0) AND f.expenses_status ='1' AND f.sign_year >='"+(Integer.parseInt(renew.getSignYear())-1)+"' ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        Map<String,Object> sign = null;
        if(list!=null&&list.size()>0){
        String sql = "SELECT * FROM wlyy_sign_family f WHERE f.patient ='" + renew.getPatient() + "' AND (f.`status` =-4 OR f.`status`>0) AND f.expenses_status ='1' AND f.sign_year >='" + (Integer.parseInt(renew.getSignYear()) - 1) + "' ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        Map<String, Object> sign = null;
        if (list != null && list.size() > 0) {
            sign = list.get(0);
        }
        Integer i = (Integer)sign.get("admin_team_code");
        Integer i = (Integer) sign.get("admin_team_code");
        Long id = i.longValue();
        if(id==null){
        if (id == null) {
            renew.setRenewFlag("2");
        }else{
            if(id==teamCode){
        } else {
            if (id == teamCode) {
                renew.setRenewFlag("1");
            }else{
            } else {
                renew.setRenewFlag("2");
            }
        }
@ -2217,4 +2338,5 @@ public class SignWebService extends BaseService {
        }
        return -1;
    }
}

+ 125 - 114
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/weixin/wxpay/service/OnePayService.java

@ -7,9 +7,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.wlyy.entity.charge.WlyyCharge;
import com.yihu.wlyy.entity.organization.HospitalMapping;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.repository.charge.ChargeDao;
import com.yihu.wlyy.repository.organization.HospitalMappingDao;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.service.third.httplog.LogService;
import com.yihu.wlyy.service.weixin.wxpay.common.Configure;
import com.yihu.wlyy.service.weixin.wxpay.model.BindCard;
@ -23,6 +25,7 @@ import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.PrintWriter;
import java.io.StringWriter;
@ -34,6 +37,7 @@ import java.util.*;
 * add by hzp at 20170523
 */
@Service
@Transactional
public class OnePayService {
    @Autowired
@ -42,8 +46,8 @@ public class OnePayService {
    @Autowired
    private LogService logService;
    private String signType= "MD5";
    private String encryptType= "AES";
    private String signType = "MD5";
    private String encryptType = "AES";
    @Autowired
    private HospitalMappingDao hospitalMappingDao;
@ -55,27 +59,26 @@ public class OnePayService {
    ChargeDao chargeDao;
    @Autowired
    PatientDao patientDao;
    @Autowired
    SignFamilyDao signFamilyDao;
    /**
     *  查询绑卡信息(本人)
     * 查询绑卡信息(本人)
     */
    public BindCard bindCard(String patient,String openid)  throws Exception
    {
    public BindCard bindCard(String patient, String openid) throws Exception {
        BindCard card = ownerCard(openid);
        //更新患者信息
        if(card!=null)
        {
        if (card != null) {
            Patient p = patientDao.findByCode(patient);
            p.setOpenid(openid);
            p.setSsc(card.getAttachCardNo());
            if(card.getAttachIdType()=="01")      //身份证
            if (card.getAttachIdType() == "01")      //身份证
            {
                p.setIdcard(card.getAttachIdNo());
            }
            if(!card.getAttachName().equals(p.getName()))
            {
                System.out.print("姓名不一致,姓名:"+p.getName()+"  社保姓名:"+card.getAttachName());
            if (!card.getAttachName().equals(p.getName())) {
                System.out.print("姓名不一致,姓名:" + p.getName() + "  社保姓名:" + card.getAttachName());
            }
            patientDao.save(p);
@ -87,17 +90,13 @@ public class OnePayService {
    /**
     * 查询绑卡信息(本人)
     */
    private BindCard ownerCard(String openid) throws Exception
    {
    private BindCard ownerCard(String openid) throws Exception {
        BindCard re = null;
        List<BindCard> cardList = bindCardList(openid);
        //更新患者信息
        if(cardList!=null && cardList.size()>0)
        {
            for(BindCard card:cardList)
            {
                if("98".equals(card.getAttachRelation()))
                {
        if (cardList != null && cardList.size() > 0) {
            for (BindCard card : cardList) {
                if ("98".equals(card.getAttachRelation())) {
                    re = card;
                    break;
                }
@ -110,8 +109,7 @@ public class OnePayService {
    /**
     * 查询绑卡信息(所有卡)
     */
    private List<BindCard> bindCardList(String openid) throws Exception
    {
    private List<BindCard> bindCardList(String openid) throws Exception {
        Boolean isSuccess = true;
        String msgBody = "";
        String response = "";
@ -120,7 +118,7 @@ public class OnePayService {
        String appId = config.getOnepayAppId();
        String appSecret = config.getOnepayAppSecret();
        OnepayDefaultClient onepayClient = new OnepayDefaultClient(config.getOnepayApi(),appId, appSecret, signType, encryptType);
        OnepayDefaultClient onepayClient = new OnepayDefaultClient(config.getOnepayApi(), appId, appSecret, signType, encryptType);
        try {
            RequestParams requestParams = new RequestParams();
@ -138,21 +136,19 @@ public class OnePayService {
            requestParams.setParam(params);
            requestParams.setTransType(config.getBindCardType());
            msgBody =  JSON.toJSONString(requestParams);
            msgBody = JSON.toJSONString(requestParams);
            ResponseParams<JSONObject> res = onepayClient.execute(requestParams);
            response =  JSON.toJSONString(res);
            response = JSON.toJSONString(res);
            // 如医保卡绑卡信息返回参数
            if (OnepayDefaultClient.isSuccessful(res)) {
                JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, BindCard.class);
                result = objectMapper.readValue(objectMapper.writeValueAsString(res.getParam().get("attachList")),javaType);
            }
            else {
                result = objectMapper.readValue(objectMapper.writeValueAsString(res.getParam().get("attachList")), javaType);
            } else {
                isSuccess = false;
                error = "请求失败,返回结果:" + res.getRespCode() + "," + res.getRespMsg();
            }
        }
        catch (Exception ex) {
        } catch (Exception ex) {
            isSuccess = false;
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
@ -161,10 +157,9 @@ public class OnePayService {
        }
        //保存http日志
        logService.saveHttpLog(isSuccess,config.getBindCardType(),"查询绑卡信息","POST",null,msgBody,response,error,logService.onepayType);
        logService.saveHttpLog(isSuccess, config.getBindCardType(), "查询绑卡信息", "POST", null, msgBody, response, error, logService.onepayType);
        if(!isSuccess)
        {
        if (!isSuccess) {
            throw new Exception(error);
        }
@ -174,23 +169,20 @@ public class OnePayService {
    /**
     * 家庭医生签约支付
     */
    public String charge(String orgCode,String chargeType,String chargeRelation,Integer totalAmount,Integer selfpayAmount,Integer insuranceAmount,String feeDetail,String patient,String openid) throws Exception
    {
    public String charge(String orgCode, String chargeType, String chargeRelation, Integer totalAmount, String feeDetail, String patient, String openid) throws Exception {
        //获取机构映射
        HospitalMapping hos = hospitalMappingDao.findByCode(orgCode);
        if(hos==null)
        {
        if (hos == null) {
            throw new Exception("no hospital mapping!");
        }
        return charge(orgCode,hos.getName(),hos.getAppId(), hos.getAppSecret(), chargeType,chargeRelation,totalAmount, selfpayAmount, insuranceAmount, feeDetail,patient,openid);
        return charge(orgCode, hos.getName(), hos.getAppId(), hos.getAppSecret(), chargeType, chargeRelation, totalAmount, feeDetail, patient, openid);
    }
    /**
     * 家庭医生签约支付,成功则返回支付路径
     */
    private String charge(String orgCode,String orgName,String appId,String appSecret,String chargeType,String chargeRelation,Integer totalAmount,Integer selfpayAmount,Integer insuranceAmount,String feeDetail,String patient,String openid) throws Exception
    {
    private String charge(String orgCode, String orgName, String appId, String appSecret, String chargeType, String chargeRelation, Integer totalAmount, String feeDetail, String patient, String openid) throws Exception {
        Boolean isSuccess = true;
        String msgBody = "";
        String response = "";
@ -199,7 +191,7 @@ public class OnePayService {
        String channel = "WX_MMP";   //  医保支付渠道
        String subject = "家庭医生签约支付";   //  订单名称
        OnepayDefaultClient onepayClient = new OnepayDefaultClient(config.getOnepayApi(),appId, appSecret, signType, encryptType);
        OnepayDefaultClient onepayClient = new OnepayDefaultClient(config.getOnepayApi(), appId, appSecret, signType, encryptType);
        WlyyCharge charge = new WlyyCharge();
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
@ -218,11 +210,12 @@ public class OnePayService {
            charge.setMerchName(orgName);
            charge.setSubject(subject);
            charge.setTotalAmount(totalAmount);  //  交易总金额
            charge.setSelfpayAmount(selfpayAmount);  //  自费金额
            charge.setInsuranceAmount(insuranceAmount);  //  医保支付金额
//            charge.setSelfpayAmount(selfpayAmount);  //  自费金额
//            charge.setInsuranceAmount(insuranceAmount);  //  医保支付金额
//            charge.setFinancialAmount(financialAmount);  //  财政补贴金额
            charge.setFeeDetail(feeDetail);  //  费用明细
            BindCard card= ownerCard(openid);
            BindCard card = ownerCard(openid);
            String name = card.getAttachName();
            String ssc = card.getAttachCardNo();
            String idType = card.getAttachIdType();
@ -230,8 +223,9 @@ public class OnePayService {
            charge.setName(name);
            charge.setIdType(idType);
            charge.setIdNo(idNo);
            charge.setSsc(ssc);
            SimpleDateFormat formatter =   new SimpleDateFormat("yyyyMMddHHmmss");
            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
            String currentDateTime = formatter.format(now);
            RequestParams requestParams = new RequestParams();
            requestParams.setAppId(appId);
@ -243,42 +237,66 @@ public class OnePayService {
            //业务参数
            JSONObject params = new JSONObject();
            params.put("outChargeNo",uuid);  //接入应用结算业务流水号
            params.put("outChargeTime",currentDateTime);    //接入应用内结算时间
            params.put("userId",openid);   //用户 ID
            params.put("cardNo",ssc);   //医保卡号"D64775061"
            params.put("outChargeNo", uuid);  //接入应用结算业务流水号
            params.put("outChargeTime", currentDateTime);    //接入应用内结算时间
            params.put("userId", openid);   //用户 ID
            params.put("cardNo", ssc);   //医保卡号"D64775061"
            //获取绑卡信息
            params.put("userName",name);
            params.put("idType",idType);
            params.put("idNo",idNo);
            params.put("totalAmount",totalAmount);   //交易总金额
            params.put("selfpayAmount",selfpayAmount);   //自费金额
            params.put("insuranceAmount",insuranceAmount);   //医保支付金额
            params.put("returnUrl","https://mp.weixin.qq.com/insurance/pay/detail");   //页面跳转地址
            params.put("feeDetail",feeDetail);   //费用明细
            params.put("channel",channel);  //微信医保支付
            params.put("merchName",orgName);  //收款单位名称
            params.put("subject",subject);  //订单名称
            params.put("userName", name);
            params.put("idType", idType);
            params.put("idNo", idNo);
            params.put("totalAmount", totalAmount);   //交易总金额
//            params.put("selfpayAmount",selfpayAmount);   //自费金额
//            params.put("insuranceAmount",insuranceAmount);   //医保支付金额
//            params.put("financialAmount",financialAmount);   //财政补贴金额
//            params.put("returnUrl","https://mp.weixin.qq.com/insurance/pay/detail");   //页面跳转地址
            params.put("returnUrl", "/html/qygl/html/pay-result.html");   //页面跳转地址
            params.put("feeDetail", feeDetail);   //费用明细
            params.put("channel", channel);  //微信医保支付
            params.put("merchName", orgName);  //收款单位名称
            params.put("subject", subject);  //订单名称
            //params.put("wxToken","");
            //extendParams 扩展入参
            Map<String,String> map = new HashMap<>();
            map.put("feeType","04");//家庭医生签约
            map.put("settleType","02"); //健康账户支付
            params.put("requestContent",objectMapper.writeValueAsString(map));// 请求结构体
            //家庭医生签约信息
            Map<String, String> familyContent = new HashMap<>();
            familyContent.put("moRegNo", "04");//医院签约号
            familyContent.put("moRegName", "02"); //签约人姓名
            familyContent.put("moRegAddr", "02"); //签约人地址
            familyContent.put("moRegTelephone", "04");//签约人联系电话
            familyContent.put("moRegOrgNo", "02"); //签约机构
            familyContent.put("moRegDocNo", "04");//签约医生编号
            familyContent.put("moRegDocName", "02"); //签约医生姓名
            familyContent.put("moRegTime", "02"); //签约时间
            familyContent.put("moRegEndTime", "02"); //签约截止时间
//            familyContent.put("moRegYear", "04");//签约年度
            familyContent.put("moRegTear", "04");//签约年度
            familyContent.put("moRegSource", "02"); //签约来源
            familyContent.put("moCollectOrgNo", "02"); //扣费机构
            familyContent.put("moCollectorNo", "04");//扣费人
            familyContent.put("benefitType", "02"); //补贴类型
            familyContent.put("moBookOrgNo", "04");//登记机构
            familyContent.put("moBookerNo", "02"); //登记人
            familyContent.put("moBookTime", "02"); //登记时间
            params.put("familyContent", objectMapper.writeValueAsString(familyContent));// 请求结构体
            //请求结构体
            Map<String, String> map = new HashMap<>();
            map.put("feeType", "04");//家庭医生签约
            map.put("settleType", "02"); //健康账户支付
            params.put("requestContent", objectMapper.writeValueAsString(map));// 请求结构体
            requestParams.setParam(params);
            msgBody =  JSON.toJSONString(requestParams);
            msgBody = JSON.toJSONString(requestParams);
            //执行支付
            ResponseParams<JSONObject> res = onepayClient.execute(requestParams);
            response =  JSON.toJSONString(res);
            response = JSON.toJSONString(res);
            if (OnepayDefaultClient.isSuccessful(res)) {
                JSONObject json = res.getParam();
                String chargeNo = String.valueOf(json.get("chargeNo"));      //医保结算业务流水号
                result =  String.valueOf(json.get("payUrl"));
                charge.setTradeStatus("0");//交易状态0 成功 1 失败 2 已退款
                result = String.valueOf(json.get("payUrl"));
//                charge.setTradeStatus("0");//交易状态0 成功 1 失败 2 已退款
                charge.setChargeNo(chargeNo);
            } else {
@ -298,10 +316,9 @@ public class OnePayService {
        chargeDao.save(charge);
        //保存http日志
        logService.saveHttpLog(isSuccess,config.getChargeType(),"家庭医生签约支付","POST",null,msgBody,response,error,logService.onepayType);
        logService.saveHttpLog(isSuccess, config.getChargeType(), "家庭医生签约支付", "POST", null, msgBody, response, error, logService.onepayType);
        if(!isSuccess)
        {
        if (!isSuccess) {
            throw new Exception(error);
        }
@ -311,8 +328,7 @@ public class OnePayService {
    /**
     * 家庭医生签约支付查询
     */
    public Charge chargeQuery(String code) throws Exception
    {
    public Charge chargeQuery(String code) throws Exception {
        Boolean isSuccess = true;
        String msgBody = "";
        String response = "";
@ -321,7 +337,7 @@ public class OnePayService {
        String appId = config.getOnepayAppId();
        String appSecret = config.getOnepayAppSecret();
        OnepayDefaultClient onepayClient = new OnepayDefaultClient(config.getOnepayApi(),appId, appSecret, signType, encryptType);
        OnepayDefaultClient onepayClient = new OnepayDefaultClient(config.getOnepayApi(), appId, appSecret, signType, encryptType);
        try {
            RequestParams requestParams = new RequestParams();
            requestParams.setAppId(appId);
@ -333,25 +349,24 @@ public class OnePayService {
            //业务参数
            JSONObject params = new JSONObject();
            params.put("outChargeNo",code);  //接入应用结算业务流水号
            params.put("outChargeNo", code);  //接入应用结算业务流水号
            requestParams.setParam(params);
            msgBody =  JSON.toJSONString(requestParams);
            msgBody = JSON.toJSONString(requestParams);
            //执行支付
            ResponseParams<JSONObject> res = onepayClient.execute(requestParams);
            response =  JSON.toJSONString(res);
            response = JSON.toJSONString(res);
            if (OnepayDefaultClient.isSuccessful(res)) {
                result = JSON.toJavaObject(res.getParam(),Charge.class);
                result = JSON.toJavaObject(res.getParam(), Charge.class);
                //业务处理*******************
                System.out.println("请求成功,返回参数:" + result.getTradeStatus() +"  " + result.getUserName());
                System.out.println("请求成功,返回参数:" + result.getTradeStatus() + "  " + result.getUserName());
            } else {
                isSuccess = false;
                error = "请求失败,返回结果:" + res.getRespCode() + "," + res.getRespMsg();
            }
        }
        catch (Exception ex) {
        } catch (Exception ex) {
            isSuccess = false;
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
@ -360,10 +375,9 @@ public class OnePayService {
        }
        //保存http日志
        logService.saveHttpLog(isSuccess,config.getChargeType(),"家庭医生签约支付查询","POST",null,msgBody,response,error,logService.onepayType);
        logService.saveHttpLog(isSuccess, config.getChargeType(), "家庭医生签约支付查询", "POST", null, msgBody, response, error, logService.onepayType);
        if(!isSuccess)
        {
        if (!isSuccess) {
            throw new Exception(error);
        }
@ -373,8 +387,7 @@ public class OnePayService {
    /**
     * 生成电子社保卡
     */
    public String createSicard(String patient,String openid) throws Exception
    {
    public String createSicard(String patient, String openid) throws Exception {
        Boolean isSuccess = true;
        String msgBody = "";
        String response = "";
@ -383,7 +396,7 @@ public class OnePayService {
        String appId = config.getOnepayAppId();
        String appSecret = config.getOnepayAppSecret();
        OnepayDefaultClient onepayClient = new OnepayDefaultClient(config.getOnepayApi(),appId, appSecret, signType, encryptType);
        OnepayDefaultClient onepayClient = new OnepayDefaultClient(config.getOnepayApi(), appId, appSecret, signType, encryptType);
        try {
            RequestParams requestParams = new RequestParams();
@ -401,9 +414,9 @@ public class OnePayService {
            requestParams.setParam(params);
            requestParams.setTransType(config.getCreateSicardType());
            msgBody =  JSON.toJSONString(requestParams);
            msgBody = JSON.toJSONString(requestParams);
            ResponseParams<JSONObject> res = onepayClient.execute(requestParams);
            response =  JSON.toJSONString(res);
            response = JSON.toJSONString(res);
            // 如医保卡绑卡信息返回参数
            if (OnepayDefaultClient.isSuccessful(res)) {
@ -411,13 +424,11 @@ public class OnePayService {
                result = String.valueOf(json.get("sicardUrl"));      //电子社保卡连接
                //保存到患者表
            }
            else {
            } else {
                isSuccess = false;
                error = "请求失败,返回结果:" + res.getRespCode() + "," + res.getRespMsg();
            }
        }
        catch (Exception ex) {
        } catch (Exception ex) {
            isSuccess = false;
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
@ -426,10 +437,9 @@ public class OnePayService {
        }
        //保存http日志
        logService.saveHttpLog(isSuccess,config.getBindCardType(),"生成电子社保卡","POST",null,msgBody,response,error,logService.onepayType);
        logService.saveHttpLog(isSuccess, config.getBindCardType(), "生成电子社保卡", "POST", null, msgBody, response, error, logService.onepayType);
        if(!isSuccess)
        {
        if (!isSuccess) {
            throw new Exception(error);
        }
@ -438,19 +448,15 @@ public class OnePayService {
    /**
     *更新所有记录的交易状态
     * 更新所有记录的交易状态
     */
    private List<WlyyCharge> updateTradeStatus(List<WlyyCharge> list)
    {
    private List<WlyyCharge> updateTradeStatus(List<WlyyCharge> list) {
        //更新交易状态
        if(list!=null &&list.size()>0)
        {
            for(WlyyCharge item:list)
            {
                try{
        if (list != null && list.size() > 0) {
            for (WlyyCharge item : list) {
                try {
                    Charge charge = chargeQuery(item.getCode());
                    if(charge!=null)
                    {
                    if (charge != null) {
                        item.setTradeStatus(charge.getTradeStatus());            //  交易状态0 成功 1 失败 2 已退款
                        item.setChargeNo(charge.getChargeNo());       //  流水号
                        item.setChargeTime(charge.getChargeTime());      // 扣费时间
@ -459,9 +465,7 @@ public class OnePayService {
                        item.setBillNo(charge.getBillNo());  //待结算费用单据号
                    }
                }
                catch (Exception ex)
                {
                } catch (Exception ex) {
                    System.out.print("update trade status fail!");
                }
            }
@ -475,9 +479,8 @@ public class OnePayService {
    /**
     * 通过交易关联代码获取交易列表
     */
    public List<WlyyCharge> chargeList(String chargeType,String chargeRelation) throws Exception
    {
        List<WlyyCharge> list = chargeDao.findByChargeTypeAndChargeRelation(chargeType,chargeRelation);
    public List<WlyyCharge> chargeList(String chargeType, String chargeRelation) throws Exception {
        List<WlyyCharge> list = chargeDao.findByChargeTypeAndChargeRelation(chargeType, chargeRelation);
        return updateTradeStatus(list);
    }
@ -485,12 +488,20 @@ public class OnePayService {
    /**
     * 通过患者代码获取交易列表
     */
    public List<WlyyCharge> chargeListByPatient(String patient, Integer page, Integer size) throws Exception
    {
    public List<WlyyCharge> chargeListByPatient(String patient, Integer page, Integer size) throws Exception {
        PageRequest pageRequest = new PageRequest(page - 1, size);
        List<WlyyCharge> list = chargeDao.findByPatient(patient,pageRequest);
        List<WlyyCharge> list = chargeDao.findByPatient(patient, pageRequest);
        return updateTradeStatus(list);
    }
    /**
     * 更改数据 wlyy_sign_family wlyy_charge
     */
    public void updateData(String patient, String chargeNo) throws Exception {
        chargeDao.updateByChargeNo(chargeNo);
        signFamilyDao.updatePatientBegin(patient, new Date(), chargeNo, "1");
    }
}

+ 290 - 268
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/sign/PatientSignController.java

@ -22,299 +22,321 @@ import java.util.List;
@Api(description = "患者端-签约管理")
public class PatientSignController extends BaseController {
	@Autowired
	private SignWebService signWebService;
    @Autowired
    private SignWebService signWebService;
	/**
	 * 个人医生签约
	 * @param doctor 医生标识
	 * @param startTime 签约开始时间
	 * @param endTime 到期时间
	 * @return 申请结果
	 */
	@RequestMapping("/sign_doctor")
	public String signDoctor(@RequestParam(value = "doctor") String doctor, 
			@RequestParam(value = "startTime", required = false) String startTime, 
			@RequestParam(value = "endTime", required = false) String endTime) {
		try {
			List<Object> listDoctor = signWebService.getSignInfoByStatus(getRepUID());
    /**
     * 个人医生签约
     *
     * @param doctor    医生标识
     * @param startTime 签约开始时间
     * @param endTime   到期时间
     * @return 申请结果
     */
    @RequestMapping("/sign_doctor")
    public String signDoctor(@RequestParam(value = "doctor") String doctor,
                             @RequestParam(value = "startTime", required = false) String startTime,
                             @RequestParam(value = "endTime", required = false) String endTime) {
        try {
            List<Object> listDoctor = signWebService.getSignInfoByStatus(getRepUID());
//			List<Object> listDoctor = signWebService.getSignInfoByStatus(getUID());
			if (listDoctor.size() > 0) {
				return error(-1, "存在已签约的医生,请确认!");
			}
            if (listDoctor.size() > 0) {
                return error(-1, "存在已签约的医生,请确认!");
            }
			Page<Object> list = signWebService.getSignInfoByPatient(getRepUID(), 0, 0, 15);
            Page<Object> list = signWebService.getSignInfoByPatient(getRepUID(), 0, 0, 15);
//			Page<Object> list = signWebService.getSignInfoByPatient(getUID(), 0, 0, 15);
			if (list.getTotalPages() > 0) {
				return error(-1, "已存在申请签约的医生,请确认!");
			}
            if (list.getTotalPages() > 0) {
                return error(-1, "已存在申请签约的医生,请确认!");
            }
			String errorMsg = "";
			if (StringUtils.isEmpty(doctor)) {
				errorMsg = "医生代码不能为空!";
			}
			
			if (StringUtils.isNotEmpty(errorMsg)) {
				return error(-1, errorMsg);
			}
            String errorMsg = "";
            if (StringUtils.isEmpty(doctor)) {
                errorMsg = "医生代码不能为空!";
            }
			SignWeb signWeb = new SignWeb();
			signWeb.setUser(getRepUID());
            if (StringUtils.isNotEmpty(errorMsg)) {
                return error(-1, errorMsg);
            }
            SignWeb signWeb = new SignWeb();
            signWeb.setUser(getRepUID());
//			signWeb.setUser(getUID());
			signWeb.setDoctor(doctor);
			signWeb.setStatus(0);
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			if (!StringUtils.isEmpty(startTime)) {
				Date beginDate = format.parse(startTime);
				signWeb.setBeginDate(beginDate);
			}
			if (!StringUtils.isEmpty(endTime)) {
				Date endDate = format.parse(endTime);
				signWeb.setEndDate(endDate);
			}
			// 操作人(1患者,2医生)
			signWeb.setOper(1);
			signWeb.setApplyDate(new Date());
			boolean result = signWebService.saveSignWeb(signWeb);
			if (!result) {
				return error(-1, getResultMsg(result, 0));
			}
            signWeb.setDoctor(doctor);
            signWeb.setStatus(0);
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            if (!StringUtils.isEmpty(startTime)) {
                Date beginDate = format.parse(startTime);
                signWeb.setBeginDate(beginDate);
            }
            if (!StringUtils.isEmpty(endTime)) {
                Date endDate = format.parse(endTime);
                signWeb.setEndDate(endDate);
            }
            // 操作人(1患者,2医生)
            signWeb.setOper(1);
            signWeb.setApplyDate(new Date());
            boolean result = signWebService.saveSignWeb(signWeb);
            if (!result) {
                return error(-1, getResultMsg(result, 0));
            }
			return success(getResultMsg(result, 0));
		} catch (Exception ex) {
			error(ex);
			return error(-1, "系统错误,请联系管理员!");
		}
            return success(getResultMsg(result, 0));
        } catch (Exception ex) {
            error(ex);
            return error(-1, "系统错误,请联系管理员!");
        }
	}
    }
	/**
	 * 修改家庭签约状态
	 * @param code 签约标识
	 * @param status 签约状态(0待签约,1已拒绝,2已签约,3患者申请取消签约,4医生申请取消签约,5已解约)
	 * @return
	 */
	@RequestMapping("/update_status")
	public String updateSignWeb(@RequestParam(value = "code") String code, 
			@RequestParam(value = "status") int status, 
			@RequestParam(value = "startDate", required = false) String startDate, 
			@RequestParam(value = "endDate", required = false) String endDate) {
		try {
			SignWeb signWeb = signWebService.getSignWebByCode(code);
			if (signWeb == null) {
				return error(-1, "签约记录不存在!");
			}
    /**
     * 修改家庭签约状态
     *
     * @param code   签约标识
     * @param status 签约状态(0待签约,1已拒绝,2已签约,3患者申请取消签约,4医生申请取消签约,5已解约)
     * @return
     */
    @RequestMapping("/update_status")
    public String updateSignWeb(@RequestParam(value = "code") String code,
                                @RequestParam(value = "status") int status,
                                @RequestParam(value = "startDate", required = false) String startDate,
                                @RequestParam(value = "endDate", required = false) String endDate) {
        try {
            SignWeb signWeb = signWebService.getSignWebByCode(code);
            if (signWeb == null) {
                return error(-1, "签约记录不存在!");
            }
			signWeb.setStatus(status);
			if (StringUtils.isNotEmpty(startDate)) {
				if (StringUtils.isEmpty(endDate)) {
					return error(-1, "到期时间不能为空!");
				}
            signWeb.setStatus(status);
            if (StringUtils.isNotEmpty(startDate)) {
                if (StringUtils.isEmpty(endDate)) {
                    return error(-1, "到期时间不能为空!");
                }
				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
				Date beginDate = format.parse(startDate);
				signWeb.setBeginDate(beginDate);
				Date endDateTime = format.parse(endDate);
				signWeb.setEndDate(endDateTime);
			}
			signWeb.setApplyDate(new Date());
			boolean result = signWebService.saveSignWeb(signWeb);
			if (!result) {
				return error(-1, getResultMsg(result, status));
			}
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                Date beginDate = format.parse(startDate);
                signWeb.setBeginDate(beginDate);
                Date endDateTime = format.parse(endDate);
                signWeb.setEndDate(endDateTime);
            }
            signWeb.setApplyDate(new Date());
            boolean result = signWebService.saveSignWeb(signWeb);
            if (!result) {
                return error(-1, getResultMsg(result, status));
            }
			return success(getResultMsg(result, status));
		} catch (Exception ex) {
			error(ex);
			return error(-1, "系统错误,请联系管理员!");
		}
	}
            return success(getResultMsg(result, status));
        } catch (Exception ex) {
            error(ex);
            return error(-1, "系统错误,请联系管理员!");
        }
    }
	/**
	 * 返回操作提醒
	 * @param result 操作结果
	 * @param status 签约状态
	 * @return
	 */
	public String getResultMsg(boolean result, int status) {
		String msg = "申请成功!";
		switch (status) {
		case 0:
			if (!result) {
				msg = "申请失败!";
			}
			break;
		case 1:
			msg = "已拒绝申请!";
			if (!result) {
				msg = "拒绝失败!";
			}
			break;
		case 2:
			msg = "签约成功!";
			if (!result) {
				msg = "签约失败!";
			}
			break;
		case 3:
		case 4:
			msg = "申请解约成功!";
			if (!result) {
				msg = "申请解约失败!";
			}
			break;
		case 5:
			msg = "解约成功!";
			if (!result) {
				msg = "解约失败!";
			}
			break;
		case 6:
			msg = "取消成功!";
			if (!result) {
				msg = "取消失败!";
			}
			break;
		}
    /**
     * 返回操作提醒
     *
     * @param result 操作结果
     * @param status 签约状态
     * @return
     */
    public String getResultMsg(boolean result, int status) {
        String msg = "申请成功!";
        switch (status) {
            case 0:
                if (!result) {
                    msg = "申请失败!";
                }
                break;
            case 1:
                msg = "已拒绝申请!";
                if (!result) {
                    msg = "拒绝失败!";
                }
                break;
            case 2:
                msg = "签约成功!";
                if (!result) {
                    msg = "签约失败!";
                }
                break;
            case 3:
            case 4:
                msg = "申请解约成功!";
                if (!result) {
                    msg = "申请解约失败!";
                }
                break;
            case 5:
                msg = "解约成功!";
                if (!result) {
                    msg = "解约失败!";
                }
                break;
            case 6:
                msg = "取消成功!";
                if (!result) {
                    msg = "取消失败!";
                }
                break;
        }
		return msg;
	}
        return msg;
    }
	/**
	 * 获取签约医生信息  状态未传查全部签约信息
	 * @param status 签约状态 (0待签约,1已拒绝,2已签约,3患者申请取消签约,4医生申请取消签约,5已解约)
	 * @return
	 */
	@RequestMapping("/sign_info")
	public String getSignInfo(@RequestParam(required = false) String status, @RequestParam(defaultValue = "0") long id, int pageSize) {
		try {
			int iStatus = 0;
			if (StringUtils.isEmpty(status)) {
				iStatus = -1;
			} else {
				iStatus = Integer.parseInt(status);
			}
    /**
     * 获取签约医生信息  状态未传查全部签约信息
     *
     * @param status 签约状态 (0待签约,1已拒绝,2已签约,3患者申请取消签约,4医生申请取消签约,5已解约)
     * @return
     */
    @RequestMapping("/sign_info")
    public String getSignInfo(@RequestParam(required = false) String status, @RequestParam(defaultValue = "0") long id, int pageSize) {
        try {
            int iStatus = 0;
            if (StringUtils.isEmpty(status)) {
                iStatus = -1;
            } else {
                iStatus = Integer.parseInt(status);
            }
//			Page<Object> listSign = signWebService.getSignInfoByPatient(getUID(), iStatus, id, pageSize);
			Page<Object> listSign = signWebService.getSignInfoByPatient(getRepUID(), iStatus, id, pageSize);
            Page<Object> listSign = signWebService.getSignInfoByPatient(getRepUID(), iStatus, id, pageSize);
            JSONArray jsonArray = new JSONArray();
            if (listSign != null) {
                for (Object obj : listSign) {
                    Object[] temp = (Object[]) obj;
                    if (temp == null) {
                        continue;
                    }
                    JSONObject json = new JSONObject();
                    json.put("code", temp[0]);
                    json.put("patientCode", temp[1]);
                    json.put("doctorCode", temp[2]);
                    json.put("doctorName", temp[3]);
                    json.put("hosptialName", temp[4]);
                    json.put("deptName", temp[5]);
                    json.put("jobName", temp[6]);
                    iStatus = (Integer) temp[7];
                    json.put("status", iStatus);
                    json.put("photo", temp[8]);
                    switch (iStatus) {
                        case 0:
                            status = "待签约";
                            break;
                        case 1:
                            status = "已拒绝";
                            break;
                        case 2:
                            status = "已签约";
                            break;
                        case 3:
                        case 4:
                            status = "申请解约";
                            break;
                        case 5:
                            status = "已解约";
                            break;
                        case 6:
                            status = "已取消";
                            break;
                    }
                    json.put("statusName", status);
                    json.put("id", temp[9]);
			JSONArray jsonArray = new JSONArray();
			if (listSign != null) {
				for (Object obj : listSign) {
					Object[] temp = (Object[]) obj;
					if (temp == null) {
						continue;
					}
					JSONObject json = new JSONObject();
					json.put("code", temp[0]);
					json.put("patientCode", temp[1]);
					json.put("doctorCode", temp[2]);
					json.put("doctorName", temp[3]);
					json.put("hosptialName", temp[4]);
					json.put("deptName", temp[5]);
					json.put("jobName", temp[6]);
					iStatus = (Integer) temp[7];
					json.put("status", iStatus);
					json.put("photo", temp[8]);
					switch (iStatus) {
					case 0:
						status = "待签约";
						break;
					case 1:
						status = "已拒绝";
						break;
					case 2:
						status = "已签约";
						break;
					case 3:
					case 4:
						status = "申请解约";
						break;
					case 5:
						status = "已解约";
						break;
					case 6:
						status = "已取消";
						break;
					}
					json.put("statusName", status);
					json.put("id", temp[9]);
                    jsonArray.put(json);
                }
            }
					jsonArray.put(json);
				}
			}
            return write(200, "查询成功!", "list", jsonArray);
        } catch (Exception ex) {
            error(ex);
            return error(-1, "系统错误,请联系管理员!");
        }
    }
			return write(200, "查询成功!", "list", jsonArray);
		} catch (Exception ex) {
			error(ex);
			return error(-1, "系统错误,请联系管理员!");
		}
	}
	@RequestMapping("/sign_doctor_info")
	public String getSignDoctorInfo(@RequestParam(required = true,value = "team")String teamCode,
									@RequestParam(required = true)String code) {
		try {
			JSONObject resultObj = signWebService.getSignInfoOrRenewInfo(teamCode,code);
			return write(200, "查询成功!", "data", resultObj);
		} catch (Exception ex) {
			error(ex);
			return error(-1, "系统错误,请联系管理员!");
		}
	}
    @RequestMapping("/sign_doctor_info")
    public String getSignDoctorInfo(@RequestParam(required = true, value = "team") String teamCode,
                                    @RequestParam(required = true) String code) {
        try {
            JSONObject resultObj = signWebService.getSignInfoOrRenewInfo(teamCode, code);
            return write(200, "查询成功!", "data", resultObj);
        } catch (Exception ex) {
            error(ex);
            return error(-1, "系统错误,请联系管理员!");
        }
    }
	@RequestMapping(value = "/consult_sign_doctor_info")
	@ResponseBody
	@ApiOperation(value = "获取咨询的服务团队")
	public String consult_sign_doctor(@RequestParam(required = true,value = "team")String teamCode,
									  @RequestParam(required = true)String code,
                                      @RequestParam(required = false)String consult,
                                      @RequestParam(required = false)Integer status){
		try{
			JSONObject resultObj =  signWebService.getConsultSignInfoOrRenewInfo(teamCode,code,getRepUID(),consult,status);
			return write(200, "查询成功!", "data", resultObj);
		}catch (Exception e){
			error(e);
			return error(-1, "签约状态查询失败!");
		}
	}
    @RequestMapping(value = "/consult_sign_doctor_info")
    @ResponseBody
    @ApiOperation(value = "获取咨询的服务团队")
    public String consult_sign_doctor(@RequestParam(required = true, value = "team") String teamCode,
                                      @RequestParam(required = true) String code,
                                      @RequestParam(required = false) String consult,
                                      @RequestParam(required = false) Integer status) {
        try {
            JSONObject resultObj = signWebService.getConsultSignInfoOrRenewInfo(teamCode, code, getRepUID(), consult, status);
            return write(200, "查询成功!", "data", resultObj);
        } catch (Exception e) {
            error(e);
            return error(-1, "签约状态查询失败!");
        }
    }
	@RequestMapping("/sign_service_info")
	public String getSignServiceInfo(@RequestParam(required = true)String signCode) {
		try {
			JSONObject resultObj = signWebService.getSignServiceInfo(signCode);
			return write(200, "查询成功!", "data", resultObj);
		} catch (Exception ex) {
			error(ex);
			return error(-1, "系统错误,请联系管理员!");
		}
	}
    @RequestMapping("/sign_service_info")
    public String getSignServiceInfo(@RequestParam(required = true) String signCode) {
        try {
            JSONObject resultObj = signWebService.getSignServiceInfo(signCode);
            return write(200, "查询成功!", "data", resultObj);
        } catch (Exception ex) {
            error(ex);
            return error(-1, "系统错误,请联系管理员!");
        }
    }
	@RequestMapping("/signs")
	public String getSigns() {
		try {
			List<JSONObject> jsonArray  = signWebService.getSigns(getRepUID());
    @RequestMapping("/signs")
    public String getSigns() {
        try {
            List<JSONObject> jsonArray = signWebService.getSigns(getRepUID());
//			List<JSONObject> jsonArray  = signWebService.getSigns(getUID());
			//JSONArray jsonArray  = signWebService.getSigns("915cc456-5b1d-11e6-8344-fa163e8aee56");
			return write(200, "查询成功!", "data",new JSONArray(jsonArray));
		} catch (Exception ex) {
			error(ex);
			return error(-1, "系统错误,请联系管理员!");
		}
	}
            //JSONArray jsonArray  = signWebService.getSigns("915cc456-5b1d-11e6-8344-fa163e8aee56");
            return write(200, "查询成功!", "data", new JSONArray(jsonArray));
        } catch (Exception ex) {
            error(ex);
            return error(-1, "系统错误,请联系管理员!");
        }
    }
    /**
     * 根据签约code查询签约详情
     * @param signCode
     * @return
     */
    @RequestMapping(value = "/signInfo",method = RequestMethod.GET)
    public String getSignInfo(@RequestParam String signCode) {
        try {
            List<JSONObject> jsonArray = signWebService.getSignInfo(signCode);
            return write(200, "查询成功!", "data", new JSONArray(jsonArray));
        } catch (Exception ex) {
            error(ex);
            return error(-1, "系统错误,请联系管理员!");
        }
    }
	/**
	 * 获取转签原因字段
	 * @return
	 */
	@RequestMapping(value = "/getRenewChangeReason", method = {RequestMethod.GET})
	@ResponseBody
	public String getRenewChangeReason(){
		try {
			JSONArray rs = signWebService.getRenewChangeReason();
			return write(200, "查询成功", "data", rs);
		} catch (Exception e) {
			return error(-1, "查询失败");
		}
	}
    /**
     * 获取转签原因字段
     *
     * @return
     */
    @RequestMapping(value = "/getRenewChangeReason", method = {RequestMethod.GET})
    @ResponseBody
    public String getRenewChangeReason() {
        try {
            JSONArray rs = signWebService.getRenewChangeReason();
            return write(200, "查询成功", "data", rs);
        } catch (Exception e) {
            return error(-1, "查询失败");
        }
    }
}

+ 172 - 29
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/wx/OnePayController.java

@ -1,8 +1,10 @@
package com.yihu.wlyy.web.wx;
import com.alibaba.fastjson.JSON;
import com.yihu.wlyy.entity.charge.WlyyCharge;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.repository.charge.ChargeDao;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.service.weixin.wxpay.model.BindCard;
@ -10,15 +12,20 @@ import com.yihu.wlyy.service.weixin.wxpay.model.Charge;
import com.yihu.wlyy.service.weixin.wxpay.service.OnePayService;
import com.yihu.wlyy.web.WeixinBaseController;
import com.ylzinfo.onepay.sdk.OnepayDefaultClient;
import com.ylzinfo.onepay.sdk.domain.ResponseParams;
import com.ylzinfo.onepay.sdk.exception.PayException;
import com.ylzinfo.onepay.sdk.utils.StringUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@ -27,11 +34,14 @@ import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLDecoder;
import java.nio.charset.Charset;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
/**
 * Created by hzp on 2017/05/23.
@ -41,12 +51,17 @@ import java.util.Map;
@Api(description = "统一支付服务")
public class OnePayController extends WeixinBaseController {
    private static final Logger LOGGER = LoggerFactory.getLogger(OnePayController.class);
    @Autowired
    private OnePayService pay;
    @Autowired
    private PatientDao patientDao;
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private ChargeDao chargeDao;
    @RequestMapping(value = "expensesStatus", method = RequestMethod.GET)
    @ApiOperation("居民缴费状态查询")
@ -54,19 +69,73 @@ public class OnePayController extends WeixinBaseController {
    public String expensesStatus() throws Exception {
        try {
            //            获取居民个人信息  要根据签约code去查找签约扣费状态
//            String userCode = getUID();
            String userCode = "915cc456-5b1d-11e6-8344-fa163e8aee56";
            SignFamily signFamily = signFamilyDao.findPatientExpensesStatus(userCode);
            String patient = getUID();
            String singCode = "044701ea-5b23-11e6-8344-fa163e8aee56";
            SignFamily sign = signFamilyDao.findByCode(singCode);
//            String patient = "915cc456-5b1d-11e6-8344-fa163e8aee56";
            SignFamily signFamily = signFamilyDao.findPatientExpensesStatus(patient);
            String expensesStatus = signFamily.getExpensesStatus();
            if ("0".equals(expensesStatus)){
                return write(200, "未扣费!","expensesStatus",expensesStatus);
            }else if ("1".equals(expensesStatus)){
                return write(200, "已扣费!","expensesStatus",expensesStatus);
            }else if ("2".equals(expensesStatus)){
                return write(200, "已退费!","expensesStatus",expensesStatus);
            }else {
                return write(200, "扣费状态数据有误!","expensesStatus",expensesStatus);
            if ("0".equals(expensesStatus)) {
                return write(200, "未扣费!", "expensesStatus", expensesStatus);
            } else if ("1".equals(expensesStatus)) {
                return write(200, "已扣费!", "expensesStatus", expensesStatus);
            } else if ("2".equals(expensesStatus)) {
                return write(200, "已退费!", "expensesStatus", expensesStatus);
            } else {
                return write(200, "扣费状态数据有误!", "expensesStatus", expensesStatus);
            }
        } catch (Exception e) {
            return error(-1, e.getMessage());
        }
    }
    /**
     * 补贴类型:无补贴01,全补贴02,补个人承担部分(20)03,补统筹基金(70)04
     *
     * @param expensesType 补贴类型
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "bill", method = RequestMethod.GET)
    @ApiOperation("居民缴费账单")
    @ResponseBody
    public String getBill(@RequestParam String expensesType) throws Exception {
        try {
            Pattern pattern = Pattern.compile("[0-9]*");
            Boolean flag = pattern.matcher(expensesType).matches();
            JSONObject json = new JSONObject();
            if (flag) {
                switch (expensesType) {
                    case "01":
                        json.put("selfpayAmount", 20);
                        json.put("financialAmount", 0);
                        json.put("insuranceAmount", 70);
                        json.put("totalAmount", 90);
                        break;
                    case "02":
                        json.put("selfpayAmount", 0);
                        json.put("financialAmount", 90);
                        json.put("insuranceAmount", 0);
                        json.put("totalAmount", 90);
                        break;
                    case "03":
                        json.put("selfpayAmount", 0);
                        json.put("financialAmount", 20);
                        json.put("insuranceAmount", 70);
                        json.put("totalAmount", 90);
                        break;
                    case "04":
                        json.put("selfpayAmount", 20);
                        json.put("financialAmount", 70);
                        json.put("insuranceAmount", 0);
                        json.put("totalAmount", 90);
                        break;
                }
            }
            return write(200, "查询缴费账单成功!", "data", json);
        } catch (Exception e) {
            return error(-1, e.getMessage());
        }
@ -77,7 +146,7 @@ public class OnePayController extends WeixinBaseController {
    @ResponseBody
    public String createSicard() throws Exception {
        try {
            String sicardUrl = pay.createSicard("0cc6e4562de2437ab2dbbf51a9fc3b49","oULM4xAj9sOsHJ95ttKYd_Fjh6Hc");//getUID(), getOpenid());
            String sicardUrl = pay.createSicard("0cc6e4562de2437ab2dbbf51a9fc3b49", "oULM4xAj9sOsHJ95ttKYd_Fjh6Hc");//getUID(), getOpenid());
            return write(200, "生成电子社保卡成功!", "data", sicardUrl);
        } catch (Exception e) {
            return error(-1, e.getMessage());
@ -89,9 +158,26 @@ public class OnePayController extends WeixinBaseController {
    @ResponseBody
    public String bindCard() throws Exception {
        try {
            BindCard bindCard = pay.bindCard("0cc6e4562de2437ab2dbbf51a9fc3b49","oULM4xAj9sOsHJ95ttKYd_Fjh6Hc");//getUID(), getOpenid());      oULM4xAj9sOsHJ95ttKYd_Fjh6Hc
            return write(200, "查询绑卡信息成功!","data",bindCard);
            //           String patient = getUID();
//            String openid = getOpenid();
            String patient = "0cc6e4562de2437ab2dbbf51a9fc3b49";
            String openid = "oULM4xAj9sOsHJ95ttKYd_Fjh6Hc";
            BindCard bindCard = pay.bindCard(patient, openid);//getUID(), getOpenid());      oULM4xAj9sOsHJ95ttKYd_Fjh6Hc
            String sicardUrl = pay.createSicard(patient, openid);//getUID(), getOpenid());
            if (bindCard != null) {
                JSONObject json = new JSONObject(bindCard);
                json.put("bindStatus", "000000");
                json.put("sicardUrl", sicardUrl);
                return write(200, "查询绑卡信息成功!", "data", json);
            } else {
//                返回电子社保卡链接
                JSONObject json = new JSONObject();
                json.put("sicardUrl", sicardUrl);
                json.put("bindStatus", "030007");
                return write(200, "生成电子社保卡成功!", "data", json);
            }
//            BindCard bindCard = pay.bindCard("0cc6e4562de2437ab2dbbf51a9fc3b49", "oULM4xAj9sOsHJ95ttKYd_Fjh6Hc");//getUID(), getOpenid());      oULM4xAj9sOsHJ95ttKYd_Fjh6Hc
//            return write(200, "查询绑卡信息成功!", "data", bindCard);
        } catch (Exception e) {
            return error(-1, e.getMessage());
        }
@ -109,27 +195,26 @@ public class OnePayController extends WeixinBaseController {
            @RequestParam String chargeRelation,
            @ApiParam(name = "totalAmount", value = "交易总金额(分)", defaultValue = "1")
            @RequestParam Integer totalAmount,
            @ApiParam(name = "selfpayAmount", value = "自费金额(分)", defaultValue = "0")
            /*@ApiParam(name = "selfpayAmount", value = "自费金额(分)", defaultValue = "0")
            @RequestParam Integer selfpayAmount,
            @ApiParam(name = "insuranceAmount", value = "医保支付金额(分)", defaultValue = "1")
            @RequestParam Integer insuranceAmount,
            @ApiParam(name = "insuranceAmount", value = "区财政补贴金额(分)", defaultValue = "1")
            @RequestParam Integer financialAmount,*/
            @ApiParam(name = "feeDetail", value = "费用明细", defaultValue = "[{\"itemName\":\"家庭医生签约支付\",\"itemDesc\":\"家庭医生签约支付\",\"itemOrigPrice\":\"1\",\"itemNowPrice\":\"1\",\"itemNum\":\"1\",\"itemTotalAmt\":\"1\"}]")
            @RequestParam String feeDetail) throws Exception {
        try {
            //            获取居民个人信息
            /*String userCode = getUID();
            Patient patient = patientDao.findByCode(userCode);
            String openId = patient.getOpenid();
            String patient = getUID();
            String openId = getOpenid();
            if (StringUtils.isNotEmpty(openId)) {
                String settleNo = pay.charge(orgCode, chargeType, chargeRelation, totalAmount, selfpayAmount, insuranceAmount, feeDetail, userCode, openId);  //ohNH9sh4uwuJCxIwcLJtGTX-BaSk    getUID(),getOpenid()
//            更新签约表的缴费状态(begin字段),表示签约正式开始
                signFamilyDao.updatePatientBegin(userCode, new Date());
                String settleNo = pay.charge(orgCode, chargeType, chargeRelation, totalAmount, feeDetail, patient, openId);  //ohNH9sh4uwuJCxIwcLJtGTX-BaSk    getUID(),getOpenid()
                return write(200, "家庭医生签约支付成功!", "data", settleNo);
            } else {
                return write(-1, "openId为空!");
            }*/
            String settleNo = pay.charge(orgCode, chargeType, chargeRelation, totalAmount, selfpayAmount, insuranceAmount, feeDetail,"0cc6e4562de2437ab2dbbf51a9fc3b49", "oULM4xAj9sOsHJ95ttKYd_Fjh6Hc");  //getUID(),getOpenid()
            return write(200, "家庭医生签约支付成功!", "data", settleNo);
            }
//            String settleNo = pay.charge(orgCode, chargeType, chargeRelation, totalAmount, selfpayAmount, insuranceAmount, feeDetail, "0cc6e4562de2437ab2dbbf51a9fc3b49", "oULM4xAj9sOsHJ95ttKYd_Fjh6Hc");  //getUID(),getOpenid()
//            return write(200, "家庭医生签约支付成功!", "data", settleNo);
        } catch (Exception e) {
            return error(-1, e.getMessage());
        }
@ -150,8 +235,6 @@ public class OnePayController extends WeixinBaseController {
    }
    @RequestMapping(value = "chargeList", method = RequestMethod.POST)
    @ApiOperation("获取某次签约的支付记录")
    @ResponseBody
@ -234,6 +317,12 @@ public class OnePayController extends WeixinBaseController {
        return targetMap;
    }
    /**
     * @param request
     * @param response
     * @throws IOException
     * @throws PayException
     */
    @RequestMapping(value = "/returnUrl", method = RequestMethod.GET)
    @ApiOperation("商户页面跳转(模拟测试)")
    public void testReturnUrl(HttpServletRequest request, HttpServletResponse response) throws IOException, PayException {
@ -249,16 +338,70 @@ public class OnePayController extends WeixinBaseController {
        try {
            OnepayDefaultClient client = new OnepayDefaultClient(onepayUrl, appId, appSecret, signType, encryptType);
            Map<String, String> returnParams = getRequestMap(request.getQueryString());
            /*boolean isVerify = client.verifyReturnSign(returnParams, returnParams.get("sign"));
           /* boolean isVerify = client.verifyReturnSign(returnParams, returnParams.get("sign"));
            if (isVerify) {
                response.getWriter().write("签名结果:\nSIGN SUCCESS.\n");
                // TODO 继续处理业务
                //		如:查询显示订单信息
//                更改数据 wlyy_sign_family wlyy_charge
            } else {
                response.getWriter().write("签名结果:\nSIGN ERROR !!!\n");
            }*/
           String patient = request.getParameter("userId");
           String chargNo = request.getParameter("chargeNo");
            pay.updateData(patient,chargNo);
        } catch (Exception e) {
            response.getWriter().write(e.getMessage());
        }
    }
    /**
     * 支付真正完成,异步回调返回支付参数 后台做数据操作
     *
     * @param request
     * @param response
     * @throws IOException
     * @throws PayException
     */
    @RequestMapping(value = "/receiveNotify", method = RequestMethod.POST)
    @ApiOperation("异步回调数据更改")
    public void receiveNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, PayException {
        response.setContentType("text/html;charset=utf-8");
        String appId = "1BHEOI11C00J7B2CA8C0000071FA53E1";
        String appSecret = "1BHEOH8HB0006E0A0A0A00002DB28BC5";
        InputStream inputStream = request.getInputStream();
        String params = StreamUtils.copyToString(inputStream, Charset.forName("UTF-8"));
        LOGGER.info("回调参数:{}", params);
        if (StringUtil.isEmpty(params)) {
            response.getWriter().write("empty");
            return;
        }
        // 参数转换
        ResponseParams<?> encryptRes = JSON.parseObject(params, ResponseParams.class);
        OnepayDefaultClient client = new OnepayDefaultClient("", appId, appSecret, encryptRes.getSignType(), encryptRes.getEncryptType());
        try {
            LOGGER.info("解密前:{}", JSON.toJSONString(encryptRes));
           /* ResponseParams<?> decryptRes = client.decryptNotifyResponse(encryptRes);
            LOGGER.info("解密后:{}", JSON.toJSONString(decryptRes));
            boolean isDecrypt = ("-1".equals(decryptRes.getRespCode()) ? false : true); // 是否解密失败
            if (!isDecrypt) {
                response.getWriter().write("DECRYPT FAILURE");
            } else {
                boolean isVerify = client.verifyResponseSign(decryptRes);
                LOGGER.info("验签结果:{}", isVerify);
                if (!isVerify) {
                    response.getWriter().write("FAILURE");
                } else {
//                    更改数据 wlyy_sign_family wlyy_charge
                    response.getWriter().write("SUCCESS");
                }
            }*/
            String patient = request.getParameter("userId");
            String chargNo = request.getParameter("chargeNo");
            pay.updateData(patient,chargNo);
        } catch (Exception e) {
            response.getWriter().write(e.getMessage());
        }
    }
}