Browse Source

预交金支付、预交金回调

bing 2 years ago
parent
commit
f3f536f788

+ 4 - 1
common/common-entity/sql记录

@ -1657,4 +1657,7 @@ CREATE TABLE `base_ylz_medical_recharge` (
  `value` varchar(2000) DEFAULT NULL COMMENT '关联处方号',
  `charge_result` varchar(50) DEFAULT NULL COMMENT '预交金交易结果',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='医保预交金充值关联表';
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='医保预交金充值关联表';
ALTER TABLE base_ylz_medical_recharge add column org_code VARCHAR(255) DEFAULT null ;
ALTER TABLE base_ylz_medical_recharge add column equ_num VARCHAR(255) DEFAULT null ;

+ 20 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/healthCare/YlzMedicalRecharge.java

@ -9,11 +9,13 @@ import javax.persistence.Table;
 * Created by Bing on 2022/7/18.
 */
@Entity
@Table(name = "base_ylz_medical_response")
@Table(name = "base_ylz_medical_recharge")
public class YlzMedicalRecharge extends UuidIdentityEntity {
    private String outChargeNo;
    private String value;
    private String chargeResult;
    private String orgCode;
    private String equNum;
    public String getOutChargeNo() {
        return outChargeNo;
@ -38,4 +40,21 @@ public class YlzMedicalRecharge extends UuidIdentityEntity {
    public void setChargeResult(String chargeResult) {
        this.chargeResult = chargeResult;
    }
    public String getOrgCode() {
        return orgCode;
    }
    public void setOrgCode(String orgCode) {
        this.orgCode = orgCode;
    }
    public String getEquNum() {
        return equNum;
    }
    public void setEquNum(String equNum) {
        this.equNum = equNum;
    }
}

+ 15 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/a4endpoint/MedicineDeviceEndpoint.java

@ -974,4 +974,19 @@ public class MedicineDeviceEndpoint extends EnvelopRestEndpoint {
        return success(deviceService.getPrescriptionStaticsByUserId(userId, day,level,area));
    }
    @GetMapping("/open/setDeviceAttribute")
    @ApiOperation(value = "设置窗口结算属性", notes = "预缴金充值结果查询")
    public Envelop setDeviceAttribute(
            @ApiParam(name="equ_num",defaultValue = "")
            @RequestParam(value = "equ_num",required = true) String equ_num
    ){
        try {
            return success("操作成功", deviceService.setDeviceAttribute(equ_num));
        } catch (Exception e) {
            e.printStackTrace();
            return Envelop.getError(e.getMessage());
        }
    }
}

+ 13 - 13
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/a4endpoint/MedicineOrderDrugsEndpoint.java

@ -107,18 +107,18 @@ public class MedicineOrderDrugsEndpoint extends EnvelopRestEndpoint {
    }
//    @GetMapping("/open/executeSickSettleMultiNew")
//    @ApiOperation(value = "续方确认结算-智业", notes = "续方确认结算-智业")
//    public Envelop getSettlementInfo(
//            @ApiParam(name = "recipe_no", value = "处方号")
//            @RequestParam(value = "recipe_no", required = true) String recipe_no){
//        try {
//            return success("结算成功", medOrderService.executeSickSettleMultiNew(recipe_no));
//        } catch (Exception e) {
//            e.printStackTrace();
//            return Envelop.getError(e.getMessage());
//        }
//    }
    @GetMapping("/open/executeSickSettleMultiNew")
    @ApiOperation(value = "续方确认结算-智业", notes = "续方确认结算-智业")
    public Envelop getSettlementInfo(
            @ApiParam(name = "recipe_no", value = "处方号")
            @RequestParam(value = "recipe_no", required = true) String recipe_no){
        try {
            return success("结算成功", medOrderService.executeSickSettleMultiNew(recipe_no));
        } catch (Exception e) {
            e.printStackTrace();
            return Envelop.getError(e.getMessage());
        }
    }
    @GetMapping("/open/hlwyyRecharge")
@ -179,7 +179,7 @@ public class MedicineOrderDrugsEndpoint extends EnvelopRestEndpoint {
        try {
            return success("操作成功", medOrderService.patientHlwyyRecharge("3502060300","14912202107000001500000000000000","DD2781527",
                    "WX_QR","10.5","350524199405230613","王志南",null));
                    "WX_QR","0.1","350524199405230613","王志南",null));
        } catch (Exception e) {
            e.printStackTrace();
            return Envelop.getError(e.getMessage());

File diff suppressed because it is too large
+ 3 - 2
svr/svr-base/src/main/java/com/yihu/jw/base/service/a3service/JwService.java


+ 8 - 8
svr/svr-base/src/main/java/com/yihu/jw/base/service/a3service/MedOrderService.java

@ -316,8 +316,9 @@ public class MedOrderService {
        /**
         * 封装挂号数据
         **/
        if (StringUtils.isBlank(ylzMedicalRelationDO.getHisSerial())){
           if (1==ylzMedicalRelationDO.getMedicalState()){//费别是医保时,医保挂号流水号空则需发起门诊挂号
//        if (StringUtils.isBlank(ylzMedicalRelationDO.getHisSerial())){
           if (1==ylzMedicalRelationDO.getMedicalState()){
               //费别是医保时,医保挂号流水号空则需发起门诊挂号
               settleTmp.put("needRegister",true);
               strinObj = JSONObject.parseObject(deviceParam.get("yb_strin").toString());
               input = new JSONObject();
@ -354,7 +355,7 @@ public class MedOrderService {
                   settleTmp.put("registerResult","{\"data\":{\"net_data\":{\"inf_refmsgid\":\"350000202207151648010011544274\",\"refmsg_time\":\"20220715164800718\",\"respond_time\":\"20220715164801114\"},\"output\":{\"data\":{\"exp_content\":null,\"ipt_otp_no\":\"72474660\",\"mdtrt_id\":\"4208923\",\"psn_no\":\"3500000135052419940523061301\"}}},\"func\":\"fsi.terminal.register\",\"retCode\":\"0000\",\"retMsg\":\"操作成功\"}");
               }
           }
        }
//        }
        result.add(settleTmp);
        return result;
    }
@ -1010,7 +1011,6 @@ public class MedOrderService {
        String idcard = "";
        String patientName = "";
        Set<String> settledErrors = new HashSet<>();//结算失败订单
        List<String> unsettled = new ArrayList<>();//初步未结算订单
        List<String> chargeSettle = new ArrayList<>();//预交金关联订单
        for (String recipe_no:recipeNos){
            YlzMedicalRelationDO ylzMedicalRelationDO = ylzMedicailRelationDao.findByLog_no(recipe_no);
@ -1021,14 +1021,14 @@ public class MedOrderService {
            orgCode = ylzMedicalRelationDO.getOrgCode();
            BigDecimal personCashTmp =  new BigDecimal(ylzMedicalRelationDO.getPersonCash());
            personCash.add(personCashTmp);//个人现金支付
            if (0==personCashTmp.doubleValue()){
            if (0==personCashTmp.doubleValue()){//费用为0
                try {
                  if (!jwService.executeSickSettleMultiNew(recipe_no)){
                      unsettled.add(recipe_no);
                      chargeSettle.add(recipe_no);
                  }
                }catch (Exception e){
                    e.printStackTrace();
                    unsettled.add(recipe_no);
                    chargeSettle.add(recipe_no);
                    settledErrors.add(recipe_no);
                }
            }
@ -1065,7 +1065,7 @@ public class MedOrderService {
            return result;
        }
        else{
            for (String recipe_no:unsettled){
            for (String recipe_no:chargeSettle){
                try {
                    if (jwService.executeSickSettleMultiNew(recipe_no)){
                        if (settledErrors.contains(recipe_no)){

+ 22 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/a3service/MedicinedeviceService.java

@ -6655,4 +6655,26 @@ public class MedicinedeviceService  extends BaseJpaService<Mediicinedevice, Medi
        return object;
    }
    public String setDeviceAttribute(String equ_num) throws Exception {
        String sql = " select dp.* from t_mediicine_device de INNER JOIN t_mediicine_device_param dp on de.id = dp.device_id  " +
                "where de.del=1 and dp.del=1 and de.equ_num='"+equ_num+"' ";
        List<Map<String,Object>> deviceParams =  jdbcTemplate.queryForList(sql);
        if (deviceParams.size()==0){
            throw new Exception("药柜参数获取错误");
        }
        Map<String,Object> deviceParam = deviceParams.get(0);
        JSONObject strinObj = JSONObject.parseObject(deviceParam.get("yb_strin").toString());
        strinObj.put("func","fsi.terminal.browser.attribute");
        sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='DeviceAttribute' ";
        List<String> Attributes = jdbcTemplate.queryForList(sql,String.class);
        if (Attributes.size()>0){
            JSONObject data = JSONObject.parseObject(Attributes.get(0));
            strinObj.put("data",data);
        }else {
            throw new Exception("未找到窗口属性设定值");
        }
        return  strinObj.toJSONString();
    }
}

+ 46 - 2
svr/svr-base/src/main/java/com/yihu/jw/base/service/a3service/YlzService.java

@ -46,6 +46,8 @@ public class YlzService {
    private String springProfiles;
    @Autowired
    private YlzMedicalRechargeDao ylzMedicalRechargeDao;
    @Autowired
    MedOrderService medOrderService;
    private final String entranceUrl="http://10.90.32.3:22174/cityihealth/base/";
@ -100,6 +102,8 @@ public class YlzService {
            YlzMedicalRecharge ylzMedicalRecharge = new YlzMedicalRecharge();
            ylzMedicalRecharge.setOutChargeNo(uuid);
            ylzMedicalRecharge.setValue(chargeSettle);
            ylzMedicalRecharge.setOrgCode(orgCode);
            ylzMedicalRecharge.setEquNum(equ_num);
            ylzMedicalRechargeDao.save(ylzMedicalRecharge);
        }
@ -308,10 +312,50 @@ public class YlzService {
        wlyyHttpLogDO.setStatus("1");
        wlyyHttpLogDO.setCreateTime(new Date());
        httpLogDao.save(wlyyHttpLogDO);
        //todo  查询预缴金充值结果 如果为succ后  查出该笔订单关联的订单 去调用his确认结算接口
        //当返回交易状态为exp(交易异常时, 建议间隔30秒重新查询,查询10次等知道交易状态为明确的succ或者fail或者notfound等其他明确交易状态)
        String outChargeNo = null;
        JSONObject responseObj = JSONObject.parseObject(response);
        JSONObject paramObj = responseObj.getJSONObject("param");
        outChargeNo = paramObj.getString("outChargeNo");
        YlzMedicalRecharge ylzMedicalRecharge = ylzMedicalRechargeDao.findByOutChargeNo(outChargeNo);
        if (null!=ylzMedicalRecharge){        //该笔订单与待结算订单有关联
            //todo  查询预缴金充值结果 如果为succ后  查出该笔订单关联的订单 去调用his确认结算接口
            int i=0;
            do{
                Map<String,String> param = new HashMap<>();
                param.put("orgCode",ylzMedicalRecharge.getOrgCode());
                param.put("equ_num",ylzMedicalRecharge.getEquNum());
                param.put("tradeType","hop.trade.recharge");
                param.put("outTradeNo",outChargeNo);
                JSONObject res = wlyyHttpService.sendWlyyMes("hlwyyQueryDetail", null,param);
                if (res.getString("status").equalsIgnoreCase("200")) {//i健康返回值
                    JSONObject responseData = res.getJSONObject("data");
                    JSONObject queryDetailParam = responseData.getJSONObject("param");
                    String result = queryDetailParam.getString("result");
                    if ("exp".equals(result)){
                    }else {
                        ylzMedicalRecharge.setChargeResult(result);
                        ylzMedicalRechargeDao.save(ylzMedicalRecharge);
                        if ("succ".equals(result)){//交易成功 (微信/支付宝成功,HIS成功)
                            String recipeNoStr = ylzMedicalRecharge.getValue();
                            String[] recipeNos = recipeNoStr.split(",");
                            try {
                                for (String recipeNo:recipeNos){
                                    medOrderService.executeSickSettleMultiNew(recipeNo);
                                }
                            }catch (Exception e){
                                e.printStackTrace();
                            }
                        }
                        break;
                    }
                }
                i++;
                System.out.printf("循环"+i);
                Thread.sleep(30000);
            }while (i<10);
        }
        logger.info("回调参数:{}", response);
    }