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.*;
//import com.kidgrow.recordcenter.feign.ChildService;
/**
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
* @Description:
* @Project: 用户中心
* @CreateDate: Created in 2020-09-17 16:21:03
* @Author: liuke
* @version 1.0
*/
@Slf4j
@Service
public class SaasClientPayServiceImpl extends SuperServiceImpl implements ISaasClientPayService {
/**
* 列表
* @param params
* @return
*/
@Autowired
private SysDoctorService sysDoctorService;
@Autowired
WxService wxService;
@Autowired
AlipayService alipayService;
@Autowired
IPayManagerService payManagerService;
@Override
public PageResult findList(Map 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 page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
List list = baseMapper.findList(page, params);
List 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.builder().data(listVo).code(0).count(page.getTotal()).build();
}
/**
* 根据SaasClientPay对象当做查询条件进行查询
* @param saasClientPay
* @return SaasClientPay
*/
@Override
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 list) {
for (String s : list) {
SaasClientPay saasClientPay = this.baseMapper.selectById(s);
if(saasClientPay!=null){
saasClientPay.setType(true);
this.saveOrUpdate(saasClientPay);
}
}
}
@Override
public List export(Map params) {
List list = baseMapper.findList(new Page<>(1, -1), params);
List 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 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 list=new ArrayList<>();
list.add(str);
list.add(aliCode);
Map map=new HashMap<>();
map.put("list",list);
double v = Double.parseDouble(modelByObject.getPayPrice().toString())/100;
map.put("payPrice",v);
return ResultBody.ok().data(map);
}
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(Double.valueOf(byObject.getPayPrice()).intValue());
// saasClientPay.setPayPrice(1);
saasClientPay.setPayKidgrow(Double.valueOf(byObject.getPayKidgrow()).intValue());
saasClientPay.setPayCustom(Double.valueOf(byObject.getPayCustom()).intValue());
saasClientPay.setPayStatus(0);
String str="";
Map 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 list=new ArrayList<>();
list.add(str);
list.add(aliCode);
Map map=new HashMap<>();
map.put("list",list);
double v = byObject.getPayPrice() / 100;
map.put("payPrice",v);
return ResultBody.ok().data(map);
}
/**
* 获取微信的二维码
* @param saasClientPay
* @return
*/
public Map 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);
}
}