forked from kidgrow-microservices-platform

zhaoxiaohao
2020-09-25 f5d17dd02b00f03bf4a2ad63fc43b8e82ef5327a
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/SaasClientPayServiceImpl.java
@@ -1,17 +1,34 @@
package com.kidgrow.oprationcenter.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.ResultBody;
import com.kidgrow.common.service.impl.SuperServiceImpl;
import com.kidgrow.oprationcenter.mapper.SaasClientPayMapper;
import com.kidgrow.oprationcenter.model.PayManager;
import com.kidgrow.oprationcenter.model.SaasClientPay;
import com.kidgrow.oprationcenter.service.AlipayService;
import com.kidgrow.oprationcenter.service.IPayManagerService;
import com.kidgrow.oprationcenter.service.ISaasClientPayService;
import com.kidgrow.oprationcenter.service.WxService;
import com.kidgrow.oprationcenter.vo.SaasClientPayExcel;
import com.kidgrow.oprationcenter.vo.SaasClientPayVo;
import com.kidgrow.usercenter.feign.SysDoctorService;
import com.kidgrow.usercenter.model.SysDoctor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cglib.beans.BeanCopier;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
//import com.kidgrow.recordcenter.feign.ChildService;
/**
@@ -30,11 +47,43 @@
     * @param params
     * @return
     */
    @Autowired
    private SysDoctorService sysDoctorService;
    @Autowired
    WxService wxService;
    @Autowired
    AlipayService alipayService;
    @Autowired
    IPayManagerService payManagerService;
    @Override
    public PageResult<SaasClientPay> findList(Map<String, Object> params){
    public PageResult<SaasClientPayVo> findList(Map<String, Object> params){
        Long doctorId = MapUtils.getLong(params, "doctorId");
        if (doctorId!=null) {
            ResultBody byId = sysDoctorService.findById(doctorId);
            if (byId.getCode()==0) {
                Object data = byId.getData();
                SysDoctor sysDoctor = JSON.parseObject(JSON.toJSONString(data), SysDoctor.class);
                if (sysDoctor!=null) {
                    params.put("createUserId",sysDoctor.getUserId());
                }
            }
            params.remove("doctorId");
        }
        Page<SaasClientPay> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
        List<SaasClientPay> list  =  baseMapper.findList(page, params);
        return PageResult.<SaasClientPay>builder().data(list).code(0).count(page.getTotal()).build();
        List<SaasClientPayVo> listVo=null;
        if (!list.isEmpty()) {
            listVo=new ArrayList<>();
            for (SaasClientPay saasClientPay : list) {
                SaasClientPayVo vo=new SaasClientPayVo();
                BeanCopier beanCopier = BeanCopier.create(SaasClientPay.class, SaasClientPayVo.class, false);
                beanCopier.copy(saasClientPay,vo,null);
                double v = Double.parseDouble(vo.getPayPrice().toString())/100;
                vo.setPrice(v+"");
                listVo.add(vo);
            }
        }
        return PageResult.<SaasClientPayVo>builder().data(listVo).code(0).count(page.getTotal()).build();
    }
    /**
@@ -46,4 +95,121 @@
    public SaasClientPay findByObject(SaasClientPay saasClientPay){
        return baseMapper.findByObject(saasClientPay);
    }
    /**
     * 查看一个科室的某个诊断的支付状态
     * @param hospitalId
     * @param departmentId
     * @param diaId
     * @return
     */
    @Override
    public SaasClientPay findModelByObject(Long hospitalId,Long departmentId,String diaId) {
        SaasClientPay saasClientPay = new SaasClientPay();
        saasClientPay.setCreateHospitalDepartid(departmentId.toString());
        saasClientPay.setCreateHospitalId(hospitalId);
        saasClientPay.setDiaId(diaId);
        return baseMapper.findByObject(saasClientPay);
    }
    @Override
    public void updateTypeList(List<String> list) {
        for (String s : list) {
            SaasClientPay saasClientPay = this.baseMapper.selectById(s);
            if(saasClientPay!=null){
                saasClientPay.setType(true);
                this.saveOrUpdate(saasClientPay);
            }
        }
    }
    @Override
    public  List<SaasClientPayExcel> export(Map<String, Object> params) {
        List<SaasClientPay> list  =  baseMapper.findList(new Page<>(1, -1), params);
        List<SaasClientPayExcel> listVo=null;
        if (!list.isEmpty()) {
            listVo=new ArrayList<>();
            for (SaasClientPay saasClientPay : list) {
                SaasClientPayExcel vo=new SaasClientPayExcel();
                BeanCopier beanCopier = BeanCopier.create(SaasClientPay.class, SaasClientPayExcel.class, false);
                beanCopier.copy(saasClientPay,vo,null);
                Double v = Double.parseDouble(saasClientPay.getPayPrice().toString())/100;
                vo.setPayPrice(v);
                Double vc = Double.parseDouble(saasClientPay.getPayCustom().toString())/100;
                vo.setPayCustom(vc);
                Double vk = Double.parseDouble(saasClientPay.getPayKidgrow().toString())/100;
                vo.setPayKidgrow(vk);
                listVo.add(vo);
            }
        }
        return listVo;
    }
    /**
     * 获取微信和支付宝的二维码
     * @param saasClientPay
     * @return
     */
    @Override
    public ResultBody getCode(SaasClientPay saasClientPay,HttpServletRequest request) throws Exception {
        SaasClientPay modelByObject = findByObject(saasClientPay);
        if(modelByObject!=null){
            String str="";
            Map<String, String> wxCode = this.getWxCode(modelByObject, request);
            if(wxCode!=null){
                saasClientPay.setPrepayId(wxCode.get("prepay_id"));
                str=wxCode.get("code_url");
            }
            String aliCode = this.getaliPayCode(modelByObject);
            List<String> list=new ArrayList<>();
            list.add(str);
            list.add(aliCode);
            return ResultBody.ok().data(list);
        }
        saasClientPay.setId(UUID.randomUUID().toString().replace("-",""));
        saasClientPay.setOutTradeNo(UUID.randomUUID().toString().replace("-",""));
        PayManager payManager = new PayManager();
        payManager.setDepartmentId(Long.valueOf(saasClientPay.getCreateHospitalDepartid()));
        payManager.setHospitalId(saasClientPay.getCreateHospitalId());
        payManager.setIsDel(false);
        payManager.setEnabled(true);
        PayManager byObject = payManagerService.findByObject(payManager);
        if(byObject==null){
            return ResultBody.failed().msg("该部门或医院没有开通单次支付");
        }
//        saasClientPay.setPayPrice(byObject.getPayPrice()*100);
        saasClientPay.setPayPrice(1);
        saasClientPay.setPayKidgrow(byObject.getPayKidgrow()*100);
        saasClientPay.setPayCustom(byObject.getPayCustom()*100);
        saasClientPay.setPayStatus(0);
        String str="";
        Map<String, String> wxCode = this.getWxCode(saasClientPay, request);
        if(wxCode!=null){
            saasClientPay.setPrepayId(wxCode.get("prepay_id"));
            str=wxCode.get("code_url");
        }
        boolean b = this.saveOrUpdate(saasClientPay);
        String aliCode = this.getaliPayCode(saasClientPay);
        List<String> list=new ArrayList<>();
        list.add(str);
        list.add(aliCode);
        return ResultBody.ok().data(list);
    }
    /**
     * 获取微信的二维码
     * @param saasClientPay
     * @return
     */
    public  Map<String,String> getWxCode(SaasClientPay saasClientPay, HttpServletRequest request) throws Exception{
        return wxService.getCode(saasClientPay,request);
    }
    /**
     * 获取支付宝的二维码
     * @param saasClientPay
     * @return
     */
    public String getaliPayCode(SaasClientPay saasClientPay) throws Exception{
        return alipayService.getCode(saasClientPay);
    }
}