Explorar o código

Merge branch 'dev' of http://192.168.1.220:10080/Amoy/patient-co-management into dev

chenweida %!s(int64=7) %!d(string=hai) anos
pai
achega
eacb259e99
Modificáronse 19 ficheiros con 467 adicións e 93 borrados
  1. 10 0
      common/common-entity/src/main/java/com/yihu/wlyy/entity/patient/prescription/Prescription.java
  2. 108 0
      common/common-entity/src/main/java/com/yihu/wlyy/entity/zydict/ZyPushLog.java
  3. 1 1
      patient-co-service/wlyy_service/src/main/java/com/yihu/wlyy/service/service/prescription/PrescriptionService.java
  4. 86 1
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/job/PrescriptionPayOverdueJob.java
  5. 6 4
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/redis/RedisThread.java
  6. 1 1
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/service/third/jw/JwPrescriptionService.java
  7. 1 1
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/web/quota/JobController.java
  8. 3 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/interceptors/EncodingFilter.java
  9. 5 1
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/message/MessageDao.java
  10. 13 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/zydict/ZyPushLogDao.java
  11. 87 10
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prescription/PatientPrescriptionPayService.java
  12. 43 30
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prescription/PrescriptionAdjustService.java
  13. 4 4
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prescription/PrescriptionInfoService.java
  14. 35 35
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prescription/PrescriptionService.java
  15. 2 2
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsService.java
  16. 1 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/template/DoctorGuidanceTempService.java
  17. 4 2
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/third/jw/JwPrescriptionService.java
  18. 46 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/util/CodeFomat.java
  19. 11 1
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/prescription/PatientPrescriptionPayController.java

+ 10 - 0
common/common-entity/src/main/java/com/yihu/wlyy/entity/patient/prescription/Prescription.java

@ -98,6 +98,8 @@ public class Prescription extends IdEntity {
    private Integer jwPayStatus;//处方结算状态,0为未结算,1为结算成功,默认为0
    private Integer zyCancelState; //智业同步取消表示:0 位同步取消 1已经同步取消
    @Column(name = "code", unique = true, nullable = false)
    public String getCode() {
        return code;
@ -688,4 +690,12 @@ public class Prescription extends IdEntity {
    public void setPresCreateTime(Date presCreateTime) {
        this.presCreateTime = presCreateTime;
    }
    public Integer getZyCancelState() {
        return zyCancelState;
    }
    public void setZyCancelState(Integer zyCancelState) {
        this.zyCancelState = zyCancelState;
    }
}

+ 108 - 0
common/common-entity/src/main/java/com/yihu/wlyy/entity/zydict/ZyPushLog.java

@ -0,0 +1,108 @@
package com.yihu.wlyy.entity.zydict;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 *  保存智业推送日志
 * Created by yeshijie on 2017/8/5.
 */
@Entity
@Table(name = "wlyy_zy_push_log")
public class ZyPushLog extends IdEntity {
    private String type;//'接口类型 1(推送续方),2续方请求', 3续方支付
    private String content;//'业务内容',
    private String api;//'调用接口',
    private String method;//'调用方式',
    private String response;//'返回结果',
    private String request;//'请求数据',
    private String error;//'报错信息',
    private String status;//'状态 0失败 1成功 2已重试',
    private Integer retryTimes;//'重试次数',
    private Date createTime;// '创建时间',
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getApi() {
        return api;
    }
    public void setApi(String api) {
        this.api = api;
    }
    public String getMethod() {
        return method;
    }
    public void setMethod(String method) {
        this.method = method;
    }
    public String getResponse() {
        return response;
    }
    public void setResponse(String response) {
        this.response = response;
    }
    public String getRequest() {
        return request;
    }
    public void setRequest(String request) {
        this.request = request;
    }
    public String getError() {
        return error;
    }
    public void setError(String error) {
        this.error = error;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public Integer getRetryTimes() {
        return retryTimes;
    }
    public void setRetryTimes(Integer retryTimes) {
        this.retryTimes = retryTimes;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

+ 1 - 1
patient-co-service/wlyy_service/src/main/java/com/yihu/wlyy/service/service/prescription/PrescriptionService.java

@ -871,7 +871,7 @@ public class PrescriptionService extends ZysoftBaseService{
        JSONObject json = new JSONObject();
        json.put("cardNo",prescription.getSsc());// "cardNo": "病人卡号",
        json.put("settleDept",prescription.getJwDeptCode());//结算科室编码
        json.put("saveOperator",prescription.getJwDoctorCode());// "saveOperator": "开单人员编码",
        json.put("settleOperator",prescription.getJwDoctorCode());// "saveOperator": "开单人员编码",
        json.put("visitNo",prescription.getVisitNo());// "院内挂号号,取费用列表中最小的院内挂号号
        //医保支付需要组装以下参数

+ 86 - 1
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/job/PrescriptionPayOverdueJob.java

@ -1,15 +1,28 @@
package com.yihu.wlyy.job;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yihu.wlyy.entity.patient.prescription.Prescription;
import com.yihu.wlyy.entity.patient.prescription.PrescriptionLog;
import com.yihu.wlyy.repository.prescription.PrescriptionDao;
import com.yihu.wlyy.util.HttpClientUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * Created by Trick on 2017/8/2.
 */
@ -17,13 +30,48 @@ import org.springframework.stereotype.Component;
public class PrescriptionPayOverdueJob implements Job {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private PrescriptionDao prescriptionDao;
    @Value("${sign.check_upload}")
    private String jwUrl;
    @Autowired
    private HttpClientUtil httpClientUtil;
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        try {
            logger.info("Prescription_Pay_Overdue_Job_start");
            String getPresSql = "SELECT t.code FROM wlyy_prescription t "+
                    " JOIN wlyy_prescription_reviewed r ON r.prescription_code = t. CODE " +
                    " WHERE " +
                    " (t.`status` = " + PrescriptionLog.PrescriptionLogStatus.wait_pay.getValue() +
                    " OR t.`status` = "+PrescriptionLog.PrescriptionLogStatus.pay_outtime.getValue()+")" +
                    " AND t.zy_cancel_state = 0 "+//未同步成功为0
                    " AND TIMESTAMPDIFF( " +
                    " SECOND, " +
                    " r.reviewed_time, " +
                    " NOW() " +
                    " ) >= 86400 " +
                    " AND TIMESTAMPDIFF( " +
                    " SECOND, " +
                    " r.reviewed_time, " +
                    " NOW() " +
                    " ) <= 604800 ";
            List<Map<String,Object>> pres = jdbcTemplate.queryForList(getPresSql);
            if(pres!=null&&pres.size()>0){
                for(Map<String,Object> m : pres){
                    String code = (String)m.get("code");
                    //挂号作废处方接口
                    try{
                        fadeRecipe(code);
                    }catch (Exception e){
                        logger.error(e.getMessage());
                    }
                }
            }
            //支付超时
            StringBuffer sql = new StringBuffer("UPDATE wlyy_prescription " +
                    " JOIN wlyy_prescription_reviewed ON wlyy_prescription_reviewed.prescription_code = wlyy_prescription. CODE " +
                    " SET wlyy_prescription.`status` = -3 " +
@ -41,4 +89,41 @@ public class PrescriptionPayOverdueJob implements Job {
            logger.info("Prescription_Pay_Overdue_Job_error");
        }
    }
    /**
     * 挂号作废处方接口
     * @param prescriptionCode 续方号码
     * @return
     * @throws Exception
     */
    public String fadeRecipe(String prescriptionCode)throws Exception{
        Prescription prescription = prescriptionDao.findByCode(prescriptionCode);
        if(StringUtils.isNotBlank(prescription.getVisitNo())){
            String url = jwUrl + "/third/prescription/fadeRecipe";
            List<NameValuePair> params = new ArrayList<>();
            params.add(new BasicNameValuePair("visitNo", prescription.getVisitNo()));//挂号号
            params.add(new BasicNameValuePair("fadeDept", prescription.getJwDeptCode()));//作废科室编码
            params.add(new BasicNameValuePair("fadeOperator", prescription.getJwDoctorCode()));//作废人员编码
            params.add(new BasicNameValuePair("recipeNo", prescription.getRecipeNo()));//基卫处方号
            String response = httpClientUtil.post(url, params, "UTF-8");
            if(StringUtils.isNotBlank(response)){
                JSONObject reobj =  JSON.parseObject(response);
                Integer status = reobj.getInteger("status");
                String errmsg = reobj.getString("msg");
                if(-1 == status){
                    throw new Exception("基卫接口(挂号作废)请求失败,"+errmsg);
                }
                prescription.setZyCancelState(1);
                prescriptionDao.save(prescription);
            }else{
                throw new Exception("基卫接口(挂号作废)请求失败,无数据返回!");
            }
            return response;
        }
        return "";
    }
}

+ 6 - 4
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/redis/RedisThread.java

@ -41,14 +41,16 @@ public class RedisThread implements Runnable {
        poolConfig.setMaxTotal(8);
        poolConfig.setMaxWaitMillis(-1);
        poolConfig.setMinIdle(1);
        JedisPool pool = new JedisPool(poolConfig,host,port,100000,password);
        JedisPool pool = null;
        if(StringUtils.isNotBlank(password)){
            pool = new JedisPool(poolConfig,host,port,100000,password);
        }else {
            pool = new JedisPool(poolConfig,host,port,100000);
        }
        while (true){
            try {
                Jedis jedis = pool.getResource();
//                if(StringUtils.isNotBlank(password)){
//                    jedis.auth(password);
//                }
                String message = jedis.rpop(key);
                if(StringUtils.isEmpty(message)){
                    Thread.sleep(1000L);//如果没有读取到记录,等待1秒

+ 1 - 1
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/service/third/jw/JwPrescriptionService.java

@ -204,7 +204,7 @@ public class JwPrescriptionService {
                JSONObject reobj =  JSON.parseObject(response);
                Integer status = reobj.getInteger("status");
                String errmsg = reobj.getString("msg");
                if(-1 == status){
                if(200 != status){
                    throw new Exception("基卫接口(挂号作废)请求失败,"+errmsg);
                }
            }else{

+ 1 - 1
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/web/quota/JobController.java

@ -414,7 +414,7 @@ public class JobController extends BaseController {
     * @Description:
     */
    @RequestMapping(value = "/prescriptionPayOverdueJobStartNow", method = RequestMethod.POST)
    @ApiOperation("立即启动支付超时过期")
    @ApiOperation("立即启动支付超时过期任务")
    public String prescriptionPayOverdueJobStartNow() {
        try {

+ 3 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/interceptors/EncodingFilter.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.interceptors;
import com.yihu.wlyy.util.CodeFomat;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -37,6 +38,8 @@ public class EncodingFilter implements Filter {
            for (int i = 0; i < values.length; i++) {
                String value = values[i];
                newRequest.removeAttribute(key);
//                解决%、+后中文以英文编码传入URLDecoder异常
                value = CodeFomat.dateToChinese(value);
                newRequest.addParameter(key, URLDecoder.decode((value),"utf-8"));
            }
        }

+ 5 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/message/MessageDao.java

@ -69,7 +69,11 @@ public interface MessageDao extends PagingAndSortingRepository<Message, Long>, J
    @Modifying
    @Query("update Message a set a.prescriptionStatus=?2 where a.relationCode = ?1 and a.type=?3 ")
    int updatePreScriptionMessage(String relateCode,String prescriptionStatus,Integer type);
    int updatePreScriptionMessage(String relationCode,String prescriptionStatus,Integer type);
    @Query("update Message a set a.read = 0,a.over = '0' where a.relationCode = ?1 and a.type = ?2")
    @Modifying
    int updatePreScriptionMessage(String relationCode,Integer type);
    @Query("update Message a set a.read = 0,a.over = '0' where a.receiver = ?1 and a.type = ?2")
    @Modifying

+ 13 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/zydict/ZyPushLogDao.java

@ -0,0 +1,13 @@
package com.yihu.wlyy.repository.zydict;
import com.yihu.wlyy.entity.zydict.ZyPushLog;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by yeshijie on 2017/8/5.
 */
public interface ZyPushLogDao extends PagingAndSortingRepository<ZyPushLog, Long>, JpaSpecificationExecutor<ZyPushLog> {
}

+ 87 - 10
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prescription/PatientPrescriptionPayService.java

@ -13,6 +13,7 @@ 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.entity.patient.prescription.*;
import com.yihu.wlyy.entity.zydict.ZyPushLog;
import com.yihu.wlyy.repository.charge.ChargeDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.message.MessageDao;
@ -21,6 +22,7 @@ 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.repository.prescription.*;
import com.yihu.wlyy.repository.zydict.ZyPushLogDao;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.service.third.httplog.LogService;
import com.yihu.wlyy.service.third.jw.JwPrescriptionService;
@ -122,6 +124,8 @@ public class PatientPrescriptionPayService extends BaseService {
    private PushMsgTask pushMsgTask;
    @Autowired
    private JwPrescriptionService jwPrescriptionService;
    @Autowired
    private ZyPushLogDao zyPushLogDao;
    /**
     * 长处方配送信息查询接口
@ -322,6 +326,7 @@ public class PatientPrescriptionPayService extends BaseService {
                String healthBalance = responseContents.getString("healthBalance");//健康账户余额
                prescriptionPay.setBillNo(billNo);//待结算费用单据号
                prescriptionPay.setChargeNo(chargeNo);//支付流水号
                prescriptionPay.setInsuranceAmount(Integer.parseInt(insuranceAmount));//医保支付金额
                prescriptionPay.setSelfPayAmount(Integer.parseInt(selfPayAmount));//自付金额
                prescriptionPay.setMiSettleNo(miSettleNo);//医保收费单据号
@ -376,8 +381,25 @@ public class PatientPrescriptionPayService extends BaseService {
            response.getWriter().write(e.getMessage());
        }
        //                记录log日志到数据库
        logService.saveHttpLog(isSuccess, config.getRecipeReturnUrl(), "长处方支付页面跳转", "POST", null, "", responses, error, logService.onepayType);
        LOGGER.info("api - "+config.getRecipeReturnUrl());
        LOGGER.info("request - "+request.toString());
        LOGGER.info("responses - "+responses);
        LOGGER.info("error - "+error);
        ZyPushLog log = new ZyPushLog();
        log.setCreateTime(new Date());
        log.setApi(config.getRecipeReturnUrl());
        log.setContent("长处方支付页面跳转");
        log.setError(error);
        log.setMethod("POST");
        log.setRequest(request.toString());
        log.setResponse(responses);
        log.setRetryTimes(0);
        log.setStatus(Integer.toString(flag));
        log.setType("3");
        zyPushLogDao.save(log);
        //记录支付log日志到数据库  支付
        logService.saveHttpLog(isSuccess, config.getRecipeReturnUrl(), "长处方支付页面跳转", "POST", null, "", responses, error, logService.onepayType);
        payLogService.addLog(prescription, PrescriptionLog.PrescriptionLogType.pay.getValue(), flag, 1);
        return resultMap;
    }
@ -387,8 +409,9 @@ public class PatientPrescriptionPayService extends BaseService {
     *
     * @return
     */
    public void receiveRecipeNotify(HttpServletRequest request, HttpServletResponse response) throws Exception {
    public String receiveRecipeNotify(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String result = null;
        Prescription prescription = null;
        Boolean isSuccess = false;
        int flag = 0;
@ -406,7 +429,7 @@ public class PatientPrescriptionPayService extends BaseService {
        LOGGER.info("回调参数:{}", params);
        if (StringUtil.isEmpty(params)) {
            response.getWriter().write("empty");
            return;
            return null;
        }
        // 参数转换
        ResponseParams<?> encryptRes = JSON.parseObject(params, ResponseParams.class);
@ -492,6 +515,7 @@ public class PatientPrescriptionPayService extends BaseService {
                    //更新数据
                    PrescriptionPay prescriptionPay = payDao.findByCode(outChargeNo);
                    prescriptionPay.setBillNo(billNo);//待结算费用单据号
                    prescriptionPay.setChargeNo(chargeNo);//支付流水号
                    prescriptionPay.setInsuranceAmount(Integer.parseInt(insuranceAmount));//医保支付金额
                    prescriptionPay.setSelfPayAmount(Integer.parseInt(selfPayAmount));//自付金额
                    prescriptionPay.setMiSettleNo(miSettleNo);//医保收费单据号
@ -544,11 +568,12 @@ public class PatientPrescriptionPayService extends BaseService {
                            messageDao.save(message);
                        }
                        //支付成功发起结算
                        try {
                            jwPrescriptionService.executeSickSettle(prescriptionCode);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        result = prescriptionCode;
//                        try {
//                            jwPrescriptionService.executeSickSettle(prescriptionCode);
//                        } catch (Exception e) {
//                            e.printStackTrace();
//                        }
                    } else if ("1".equals(tradeStatus) || "FAIL".equals(tradeStatus)) {
                        prescriptionPay.setTradeStatus("0");//交易状态 成功1 失败0
                        prescription.setStatus(PrescriptionLog.PrescriptionLogStatus.pay_error.getValue());////续费状态 30支付成功 21支付失败
@ -566,9 +591,27 @@ public class PatientPrescriptionPayService extends BaseService {
            response.getWriter().write(e.getMessage());
        }
        //                记录log日志到数据库
        logService.saveHttpLog(isSuccess, config.getReceiveRecipeNotify(), "异步支付通知", "POST", null, params, responses, error, logService.onepayType);
        LOGGER.info("api - "+config.getReceiveRecipeNotify());
        LOGGER.info("request - "+params);
        LOGGER.info("responses - "+responses);
        LOGGER.info("error - "+error);
        ZyPushLog log = new ZyPushLog();
        log.setCreateTime(new Date());
        log.setApi(config.getReceiveRecipeNotify());
        log.setContent("续方异步支付通知");
        log.setError(error);
        log.setMethod("POST");
        log.setRequest(params);
        log.setResponse(responses);
        log.setRetryTimes(0);
        log.setStatus(Integer.toString(flag));
        log.setType("3");
        zyPushLogDao.save(log);
        //记录支付log日志到数据库
        logService.saveHttpLog(isSuccess, config.getReceiveRecipeNotify(), "异步支付通知", "POST", null, params, responses, error, logService.onepayType);
        payLogService.addLog(prescription, PrescriptionLog.PrescriptionLogType.pay.getValue(), flag, 1);
        return result;
    }
//******************************************  长处方支付基本工具方法  *******************************************************************************
@ -928,8 +971,25 @@ public class PatientPrescriptionPayService extends BaseService {
            error = sw.toString();
        }
        //保存http日志
        logService.saveHttpLog(isSuccess, config.getRecipeChargeType(), "长处方结算", "POST", null, msgBody, response, error, logService.onepayType);
        LOGGER.info("api - "+config.getRecipeChargeType());
        LOGGER.info("request - "+msgBody);
        LOGGER.info("responses - "+response);
        LOGGER.info("error - "+error);
        ZyPushLog log = new ZyPushLog();
        log.setCreateTime(new Date());
        log.setApi(config.getRecipeChargeType());
        log.setContent("长处方结算");
        log.setError(error);
        log.setMethod("POST");
        log.setRequest(msgBody);
        log.setResponse(response);
        log.setRetryTimes(0);
        log.setStatus(Integer.toString(flag));
        log.setType("3");
        zyPushLogDao.save(log);
        //保存长处方日志  type=2易联众对接 flag =1成功 flag=0 0失败 userType 1 患者 2医生
        logService.saveHttpLog(isSuccess, config.getRecipeChargeType(), "长处方结算", "POST", null, msgBody, response, error, logService.onepayType);
        payLogService.addLog(prescription, PrescriptionLog.PrescriptionLogType.pay.getValue(), flag, 1);
        if (!isSuccess) {
            throw new Exception(error);
@ -1006,6 +1066,23 @@ public class PatientPrescriptionPayService extends BaseService {
        }
        //type = 3易联众接口保存http日志
        LOGGER.info("api - "+config.getChargeQueryType());
        LOGGER.info("request - "+msgBody);
        LOGGER.info("responses - "+response);
        LOGGER.info("error - "+error);
        ZyPushLog log = new ZyPushLog();
        log.setCreateTime(new Date());
        log.setApi(config.getChargeQueryType());
        log.setContent("长处方支付查询");
        log.setError(error);
        log.setMethod("POST");
        log.setRequest(msgBody);
        log.setResponse(response);
        log.setRetryTimes(0);
        log.setStatus(Integer.toString(flag));
        log.setType("3");
        zyPushLogDao.save(log);
        logService.saveHttpLog(isSuccess, config.getChargeQueryType(), "长处方支付查询", "POST", null, msgBody, response, error, logService.onepayType);
        if (!isSuccess) {
            throw new Exception(error);

+ 43 - 30
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prescription/PrescriptionAdjustService.java

@ -118,6 +118,7 @@ public class PrescriptionAdjustService extends BaseService {
     * 上传ca认证信息
     * @param code
     */
    @Transactional
    public JSONObject uploadCaDigital(String code){
        JSONObject re = new JSONObject();
        Prescription prescription = prescriptionDao.findByCode(code);
@ -130,36 +131,48 @@ public class PrescriptionAdjustService extends BaseService {
                if("1".equals(zyCode)){
                    JSONArray returnData = data.getJSONArray("returnData");
                    if(returnData.size()>0){
                        JSONObject pre = returnData.getJSONArray(0).getJSONObject(0);
                        //认证成功-审核完成
                        prescription.setStatus(PrescriptionLog.PrescriptionLogStatus.wait_pay.getValue());
                        //设置审核通过
                        PrescriptionReviewed reviewed = prescriptionReviewedDao.findByPrescriptionCode(code);
                        reviewed.setStatus(1);
                        reviewed.setReviewedTime(new Date());
                        prescriptionDao.save(prescription);
                        //审核通过模板消息
                        prescriptionInfoService.sendRMess(prescription.getCode(), 1);
                        //发送Im消息
                        JSONObject content = new JSONObject();
                        content.put("title", "我已经审核您" + DateUtil.dateToStr(prescription.getCreateTime(), "yyyy-MM-dd") + "发起的续方申请");
                        content.put("result", "审核通过");
                        content.put("reason", "");
                        content.put("url", "");
                        imUtill.sendTopicIM(prescription.getDoctor(), prescription.getDoctorName(), prescription.getConsult(), "15", content.toString(), null);
                        //修改系统的续方消息的审核状态
                        messageDao.updatePreScriptionMessage(prescription.getConsult(), "1", 6);
                        //获取智业待结算接口,更新药品金额
                        prescriptionService.getPerscriptionInfoCostFromPayInfo(prescription.getCode());
                        //添加日志
                        prescriptionLogService.addLog(prescription,PrescriptionLog.PrescriptionLogType.zy.getValue(),1,2);
                        re.put("status",200);
                        //{"status":200,"msg":"CA认证通过接口!","data":"{\"CODE\":\"1\",\"returnData\":[{\"result\":\"True\"}],\"byRefParaData\":[{ \"errorMsg\": \"\" }]}"}
                        JSONObject pre = returnData.getJSONObject(0);
                        if("True".equals(pre.getString("result"))){
                            //认证成功-审核完成
                            prescription.setStatus(PrescriptionLog.PrescriptionLogStatus.wait_pay.getValue());
                            //设置审核通过
                            PrescriptionReviewed reviewed = prescriptionReviewedDao.findByPrescriptionCode(code);
                            reviewed.setStatus(1);
                            reviewed.setReviewedTime(new Date());
                            prescriptionDao.save(prescription);
                            //审核通过模板消息
                            prescriptionInfoService.sendRMess(prescription.getCode(), 1);
                            //修改系统的续方消息的审核状态
                            messageDao.updatePreScriptionMessage(prescription.getConsult(), "1", 6);
                            //修改系统的消息的待ca认证
                            messageDao.updatePreScriptionMessage(prescription.getCode(), 9);
                            //获取智业待结算接口,更新药品金额
                            prescriptionService.getPerscriptionInfoCostFromPayInfo(prescription.getCode());
                            //添加日志
                            prescriptionLogService.addLog(prescription,PrescriptionLog.PrescriptionLogType.zy.getValue(),1,2);
                            //发送Im消息
                            JSONObject content = new JSONObject();
                            content.put("title", "我已经审核您" + DateUtil.dateToStr(prescription.getCreateTime(), "yyyy-MM-dd") + "发起的续方申请");
                            content.put("result", "审核通过");
                            content.put("reason", "");
                            content.put("url", "");
                            imUtill.sendTopicIM(prescription.getDoctor(), prescription.getDoctorName(), prescription.getConsult(), "15", content.toString(), null);
                            re.put("status",200);
                        }else {
                            //请求失败
                            prescriptionLogService.addLog(prescription,PrescriptionLog.PrescriptionLogType.zy.getValue(),0,2);
                            JSONArray byRefParaData = data.getJSONArray("byRefParaData");
                            re.put("status",-1);
                            re.put("msg",byRefParaData.getJSONObject(0).getString("errorMsg"));
                        }
                    }else {
                        //请求失败
                        prescriptionLogService.addLog(prescription,PrescriptionLog.PrescriptionLogType.zy.getValue(),0,2);

+ 4 - 4
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prescription/PrescriptionInfoService.java

@ -562,11 +562,11 @@ public class PrescriptionInfoService extends BaseService {
        }
        if (StringUtils.isNotBlank(startDate)) {
            pre_sql.append(" AND pr.create_time >= ? ");
            params.add(startDate);
            params.add(startDate+" 00:00:00");
        }
        if (StringUtils.isNotBlank(endDate)) {
            pre_sql.append(" AND pr.create_time <= ?  ");
            params.add(endDate);
            pre_sql.append(" AND pr.create_time <= ? ");
            params.add(endDate+" 23:59:59");
        }
        if (StringUtils.isNotBlank(nameKeyword)) {
            pre_sql.append(" AND pr.patient_name like ? ");
@ -578,7 +578,7 @@ public class PrescriptionInfoService extends BaseService {
        }
        //排序
        if(StringUtils.isNotBlank(state)&&"0,2,3,4,10".equals(state)){
            pre_sql.append(" GROUP BY pr.code ORDER BY pr.min_drug_day-TIMESTAMPDIFF(DAY, pr.pres_create_time, NOW()) ASC");
            pre_sql.append(" GROUP BY pr.code ORDER BY pr.min_drug_day-TIMESTAMPDIFF(DAY, pr.pres_create_time, NOW()) ASC,pr.create_time DESC");
        }else{
            pre_sql.append(" GROUP BY pr.code ORDER BY pr.create_time DESC");
        }

+ 35 - 35
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prescription/PrescriptionService.java

@ -264,41 +264,41 @@ public class PrescriptionService extends BaseService {
                    for (int j= 0; j < zySettleDetailList.size(); j++) {
                        JSONObject zySettleDetailObj = zySettleDetailList.getJSONObject(j);
                        String RECIPE_NO = zySettleDetailObj.getString("RECIPE_NO");
                        if(recipeNo.equals(RECIPE_NO)){//过滤其他处方号
                            cfxms0++;
                            JSONObject j2 = new JSONObject();
                            j2.put("xmbh00",zySettleDetailObj.getString("INSUR_ITEM_CODE"));//项目编号
                            j2.put("xmmc00",zySettleDetailObj.getString("INSUR_ITEM_NAME"));//项目名称
                            j2.put("fpxmbh",zySettleDetailObj.getString("INSUR_INVOICE_TYPE_CODE"));//发票项目编号
                            j2.put("sfybxm",zySettleDetailObj.getString("INSUR_FLAG"));//是否医保项目
                            Double _price = Double.parseDouble(zySettleDetailObj.getString("INSUR_ITEM_PRICE"));
                            DecimalFormat df = new DecimalFormat("######0.00");
                            _price = _price*100;
                            j2.put("xmdj00",df.format(_price));//项目单价
                            j2.put("xmdw00",zySettleDetailObj.getString("INSUR_ITEM_UNIT_NAME"));//项目单位
                            j2.put("xmgg00",zySettleDetailObj.getString("INSUR_ITEM_SPEC"));//项目规格(医保)
                            j2.put("xmsl00",zySettleDetailObj.getString("ITEM_QUANTITY"));//项目数量
                            Double _cost = Double.parseDouble(zySettleDetailObj.getString("COST"));
                            Integer infocost = CommonUtil.doubleToInt(_cost);
                            j2.put("xmje00",String.valueOf(infocost));//项目金额
                            j2.put("ysxm00",zySettleDetailObj.getString("APPLY_OPERATOR_NAME"));//医生姓名
                            j2.put("sptxbm","");//商品条形编码
                            j2.put("yppl00",zySettleDetailObj.getString("FREQUENCY"));//药品频率
                            j2.put("ypyl00",zySettleDetailObj.getString("PHYSIC_DOSE"));//药品用量
                            j2.put("cfhao0",zySettleDetailObj.getString("RECIPE_NO"));//处方号
                            j2.put("jx0000",zySettleDetailObj.getString("PHYSIC_FORM"));//剂型
                            j2.put("dcyydw",zySettleDetailObj.getString("PHYSIC_DOSE_UNIT"));//单次用药单位
                            j2.put("qyzl00",zySettleDetailObj.getString("PHYSIC_AMOUNT"));//取药总量
                            j2.put("qyzldw",zySettleDetailObj.getString("PHYSIC_AMOUNT_UNIT"));//取药单位
                            j2.put("gytj00",zySettleDetailObj.getString("PHYSIC_USAGE"));//给药途径
                            j2.put("ypts00",zySettleDetailObj.getString("DAY_COUNT"));//药品天数
                            cfInfo.add(j2);
                        }
//                        String RECIPE_NO = zySettleDetailObj.getString("RECIPE_NO");
//                        if(recipeNo.equals(RECIPE_NO)){//过滤其他处方号
                        cfxms0++;
                        JSONObject j2 = new JSONObject();
                        j2.put("xmbh00",zySettleDetailObj.getString("INSUR_ITEM_CODE"));//项目编号
                        j2.put("xmmc00",zySettleDetailObj.getString("INSUR_ITEM_NAME"));//项目名称
                        j2.put("fpxmbh",zySettleDetailObj.getString("INSUR_INVOICE_TYPE_CODE"));//发票项目编号
                        j2.put("sfybxm",zySettleDetailObj.getString("INSUR_FLAG"));//是否医保项目
                        Double _price = Double.parseDouble(zySettleDetailObj.getString("INSUR_ITEM_PRICE"));
                        DecimalFormat df = new DecimalFormat("######0.00");
                        _price = _price*100;
                        j2.put("xmdj00",df.format(_price));//项目单价
                        j2.put("xmdw00",zySettleDetailObj.getString("INSUR_ITEM_UNIT_NAME"));//项目单位
                        j2.put("xmgg00",zySettleDetailObj.getString("INSUR_ITEM_SPEC"));//项目规格(医保)
                        j2.put("xmsl00",zySettleDetailObj.getString("ITEM_QUANTITY"));//项目数量
                        Double _cost = Double.parseDouble(zySettleDetailObj.getString("COST"));
                        Integer infocost = CommonUtil.doubleToInt(_cost);
                        j2.put("xmje00",String.valueOf(infocost));//项目金额
                        j2.put("ysxm00",zySettleDetailObj.getString("APPLY_OPERATOR_NAME"));//医生姓名
                        j2.put("sptxbm","");//商品条形编码
                        j2.put("yppl00",zySettleDetailObj.getString("FREQUENCY"));//药品频率
                        j2.put("ypyl00",zySettleDetailObj.getString("PHYSIC_DOSE"));//药品用量
                        j2.put("cfhao0",zySettleDetailObj.getString("RECIPE_NO"));//处方号
                        j2.put("jx0000",zySettleDetailObj.getString("PHYSIC_FORM"));//剂型
                        j2.put("dcyydw",zySettleDetailObj.getString("PHYSIC_DOSE_UNIT"));//单次用药单位
                        j2.put("qyzl00",zySettleDetailObj.getString("PHYSIC_AMOUNT"));//取药总量
                        j2.put("qyzldw",zySettleDetailObj.getString("PHYSIC_AMOUNT_UNIT"));//取药单位
                        j2.put("gytj00",zySettleDetailObj.getString("PHYSIC_USAGE"));//给药途径
                        j2.put("ypts00",zySettleDetailObj.getString("DAY_COUNT"));//药品天数
                        cfInfo.add(j2);
//                        }
                    }
                    //处方主信息     {"yyksbm":"医生科室编号","bcsfcs":"本次收费次数","yszjhm":"医生证件号码","ysxm00":"医生姓名","mzlb00":"门诊类别","sfydgh":"是否药店挂号",

+ 2 - 2
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsService.java

@ -1877,9 +1877,9 @@ public class StatisticsService extends BaseService {
        //1.统计签约数据
        //查找团队签约
        String sign_sql = "SELECT COUNT(1) signCount FROM wlyy_sign_family t WHERE t.admin_team_code =" + id + " AND t.czrq >='" + startDate + "' AND t.czrq<='" + endDate + "' AND t.status >0 AND  t.expenses_status ='1'";
        String sign_sql = "SELECT COUNT(1) signCount FROM wlyy_sign_family t WHERE t.admin_team_code =" + id + " AND t.apply_date >='" + startDate + "' AND t.apply_date<='" + endDate + "' AND t.status >0 AND  t.expenses_status ='1'";
        //查找续签表未转移的记录
        String renew_sql = "SELECT COUNT(1) renewCount FROM wlyy_sign_family_renew t WHERE t.admin_team_code =" + id + " AND t.czrq >='" + startDate + "' AND t.czrq<='" + endDate + "' AND t.status =1 AND t.expenses_status ='1' AND t.is_valid =0";
        String renew_sql = "SELECT COUNT(1) renewCount FROM wlyy_sign_family_renew t WHERE t.admin_team_code =" + id + " AND t.apply_date >='" + startDate + "' AND t.apply_date<='" + endDate + "' AND t.status =1 AND t.expenses_status ='1' AND t.is_valid =0";
        //3.平均满意度

+ 1 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/template/DoctorGuidanceTempService.java

@ -3,6 +3,7 @@ package com.yihu.wlyy.service.template;
import com.yihu.wlyy.entity.template.DoctorGuidanceTemp;
import com.yihu.wlyy.repository.template.DoctorGuidanceTempDao;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.util.CodeFomat;
import com.yihu.wlyy.util.CommonUtil;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;

+ 4 - 2
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/third/jw/JwPrescriptionService.java

@ -236,7 +236,7 @@ public class JwPrescriptionService {
            JSONObject reobj =  JSON.parseObject(response);
            Integer status = reobj.getInteger("status");
            String errmsg = reobj.getString("msg");
            if(-1 == status){
            if(200 != status){
                throw new Exception("基卫接口(院内结算确认接口)请求失败,"+errmsg);
            }else{
                prescriptionDao.updatejwPayStatus(prescriptionCode);
@ -270,9 +270,11 @@ public class JwPrescriptionService {
                JSONObject reobj =  JSON.parseObject(response);
                Integer status = reobj.getInteger("status");
                String errmsg = reobj.getString("msg");
                if(-1 == status){
                if(200 != status){
                    throw new Exception("基卫接口(挂号作废)请求失败,"+errmsg);
                }
                prescription.setZyCancelState(1);
                prescriptionDao.save(prescription);
            }else{
                throw new Exception("基卫接口(挂号作废)请求失败,无数据返回!");
            }

+ 46 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/util/CodeFomat.java

@ -0,0 +1,46 @@
package com.yihu.wlyy.util;
import java.net.URLDecoder;
/**
 * Created by Reece on 2017/8/28/028.
 * <p>
 * 特殊字符编码转换
 */
public class CodeFomat {
    /**
     *  解决%、+后中文以英文编码传入URLDecoder异常
     * @param resource 英文编码
     * @return 中文编码
     */
    public static String dateToChinese(String resource) {
        String data = resource.toString();
        try {
            data = data.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
            data = data.replaceAll("\\+", "%2B");
//            data = URLDecoder.decode(data, "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return data;
    }
    /**
     *  解决数据库以%25代替%、+后的数据展示问题
     * @param resource 中文编码
     * @return 英文编码
     */
    public static String chineseToDate(String resource) {
        String data = resource.toString();
        try {
            data = data.replaceAll("%25", "%");
            data = data.replaceAll("%2B", "+");
//            data = URLDecoder.decode(data, "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return data;
    }
}

+ 11 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/prescription/PatientPrescriptionPayController.java

@ -3,6 +3,7 @@ package com.yihu.wlyy.web.patient.prescription;
import com.yihu.wlyy.service.app.prescription.PatientPrescriptionPayService;
import com.yihu.wlyy.service.app.prescription.PrescriptionNoticesService;
import com.yihu.wlyy.service.app.prescription.PrescriptionService;
import com.yihu.wlyy.service.third.jw.JwPrescriptionService;
import com.yihu.wlyy.web.WeixinBaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -33,6 +34,8 @@ public class PatientPrescriptionPayController extends WeixinBaseController {
    private PrescriptionService prescriptionService;
    @Autowired
    private PrescriptionNoticesService noticesService;
    @Autowired
    private JwPrescriptionService jwPrescriptionService;
    /**
     * 患者长处方支付接口 可配送方式查询
@ -141,7 +144,14 @@ public class PatientPrescriptionPayController extends WeixinBaseController {
    @ApiOperation(value = "对接方异步回调接口")
    public void receiveRecipeNotify(HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
            payService.receiveRecipeNotify(request, response);
            String result = payService.receiveRecipeNotify(request, response);
            if (result!=null){
                try {
                    jwPrescriptionService.executeSickSettle(result);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
            error(e);
        }