新增上报处方平台接口

This commit is contained in:
2023-09-13 19:09:14 +08:00
parent 84c7997f12
commit 296199e760
14 changed files with 867 additions and 70 deletions
+263 -2
View File
@@ -1,6 +1,267 @@
package service
// ReportPreProduct 商品订单上报处方平台
func ReportPreProduct() {
import (
"errors"
"fmt"
"hospital-admin-api/api/dao"
"hospital-admin-api/extend/prescription"
"hospital-admin-api/utils"
"strings"
"time"
)
type OrderService struct {
}
// ReportPreProduct 商品订单上报处方平台
func (r *OrderService) ReportPreProduct(orderProductId int64) (bool, error) {
// 获取药品订单详情
orderProductDao := dao.OrderProductDao{}
orderProduct, err := orderProductDao.GetOrderProductPreloadById(orderProductId)
if err != nil || orderProduct == nil {
return false, errors.New("订单数据错误")
}
// 已上报
if orderProduct.ReportPreStatus == 1 {
return false, errors.New("订单已上报")
}
// 检测订单状态
if orderProduct.OrderProductStatus == 1 {
return false, errors.New("订单处于待支付状态,无法取消")
}
if orderProduct.OrderProductStatus == 3 {
return false, errors.New("订单已发货,无法取消")
}
if orderProduct.OrderProductStatus == 4 {
return false, errors.New("订单已签收,无法取消")
}
if orderProduct.OrderProductStatus == 5 {
return false, errors.New("订单已取消,无法取消")
}
// 检测支付状态
if orderProduct.PayStatus != 2 {
return false, errors.New("订单支付状态错误")
}
// 检测订单退款状态
if orderProduct.RefundStatus == 1 {
return false, errors.New("订单申请退款中,无法取消")
}
if orderProduct.RefundStatus == 2 {
return false, errors.New("订单正在退款中,无法取消")
}
if orderProduct.RefundStatus == 3 {
return false, errors.New("订单已退款成功,无法取消")
}
if orderProduct.RefundStatus == 6 {
return false, errors.New("订单退款异常,请联系技术人员")
}
// 获取处方数据
orderPrescriptionDao := dao.OrderPrescriptionDao{}
orderPrescription, _ := orderPrescriptionDao.GetById(orderProduct.OrderPrescriptionId)
if orderPrescription == nil {
return false, errors.New("数据错误,无处方数据")
}
// 获取问诊订单数据
orderInquiryDao := dao.OrderInquiryDao{}
orderInquiry, _ := orderInquiryDao.GetOrderInquiryById(orderProduct.OrderInquiryId)
if orderInquiry == nil {
return false, errors.New("数据错误,无问诊订单数据")
}
// 获取问诊病例数据
orderInquiryCaseDao := dao.OrderInquiryCaseDao{}
orderInquiryCase, _ := orderInquiryCaseDao.GetOrderInquiryCaseByOrderInquiryId(orderProduct.OrderInquiryId)
if orderInquiryCase == nil {
return false, errors.New("数据错误,无问诊病例")
}
// 获取商品订单列表数据
orderProductItemDao := dao.OrderProductItemDao{}
orderProductItems, err := orderProductItemDao.GetOrderProductItemByOrderProductId(orderProductId)
if err != nil || len(orderProductItems) == 0 {
return false, errors.New("数据错误,无药品数据")
}
// 获取就诊患者用户数据
userDao := dao.UserDao{}
user, err := userDao.GetUserById(orderInquiry.UserId)
if err != nil && user == nil {
return false, errors.New("就诊患者数据错误")
}
// 获取家庭成员-基本信息
patientFamilyDao := dao.PatientFamilyDao{}
patientFamily, _ := patientFamilyDao.GetPatientFamilyById(orderInquiry.FamilyId)
if patientFamily == nil {
return false, errors.New("数据错误,无家庭成员数据")
}
// 获取处方关联疾病数据
orderPrescriptionIcdDao := dao.OrderPrescriptionIcdDao{}
orderPrescriptionIcds, _ := orderPrescriptionIcdDao.GetOrderPrescriptionIcdListByOrderPrescriptionId(orderPrescription.OrderPrescriptionId)
if err != nil || len(orderPrescriptionIcds) == 0 {
return false, errors.New("数据错误,无处方关联疾病数据")
}
// 获取医生数据
userDoctorDao := dao.UserDoctorDao{}
userDoctor, _ := userDoctorDao.GetUserDoctorById(orderPrescription.DoctorId)
if userDoctor == nil {
return false, errors.New("数据错误,无医生数据")
}
// 获取医生详情数据
userDoctorInfoDao := dao.UserDoctorInfoDao{}
userDoctorInfo, _ := userDoctorInfoDao.GetUserDoctorInfoByDoctorId(orderPrescription.DoctorId)
if userDoctorInfo == nil {
return false, errors.New("数据错误,无医生详情数据")
}
// 获取药师数据
userPharmacistDao := dao.UserPharmacistDao{}
userPharmacist, _ := userPharmacistDao.GetUserPharmacistById(orderPrescription.PharmacistId)
if userPharmacist == nil {
return false, errors.New("数据错误,无药师数据")
}
// 获取药师详情数据
userPharmacistInfoDao := dao.UserPharmacistInfoDao{}
userPharmacistInfo, _ := userPharmacistInfoDao.GetUserPharmacistInfoByPharmacistId(orderPrescription.PharmacistId)
if userPharmacistInfo == nil {
return false, errors.New("数据错误,无药师详情数据")
}
// 获取医生科室数据
hospitalDepartmentCustomDao := dao.HospitalDepartmentCustomDao{}
hospitalDepartmentCustom, _ := hospitalDepartmentCustomDao.GetHospitalDepartmentCustomById(userDoctor.DepartmentCustomId)
if hospitalDepartmentCustom == nil {
return false, errors.New("数据错误,无医生科室数据")
}
// 处理疾病数据
icdNameSlice := make([]string, 0)
for _, orderPrescriptionIcd := range orderPrescriptionIcds {
if orderPrescriptionIcd.IcdName != "" {
icdNameSlice = append(icdNameSlice, orderPrescriptionIcd.IcdName)
}
}
icdNameStr := strings.Join(icdNameSlice, ";")
// 处理上传数据-药品数据
drugRequests := make([]prescription.DrugRequest, len(orderProductItems))
orderDrugRequests := make([]prescription.OrderDrugRequest, len(orderProductItems))
for i, o := range orderProductItems {
// 获取商品数据
productDao := dao.ProductDao{}
product, _ := productDao.GetProductById(o.ProductId)
if product == nil {
return false, errors.New("数据错误,无药品数据")
}
useDays := o.Amount * 7
if product.AvailableDays != 0 {
useDays = int(product.AvailableDays)
}
// 药品数据1
drugRequest := prescription.DrugRequest{
DrugCode: product.ProductPlatformCode, // 药品编码
ApprovalNumber: product.LicenseNumber, // 批准文号
DrugName: product.ProductName, // 药品名称
Specifications: product.ProductSpec, // 药品规格
Price: product.ProductPrice, // 药品单价
PackingCount: o.Amount, // 药品数量
SurplusPackingCount: 0, // 处方药品剩余使用数量
PackingUnit: product.PackagingUnit, // 药品单位
SingleDosage: 1, // 单次用量
SingleDosageUnit: "片", // 单次用量单位
UseName: product.SingleUse, // 用法名称
FrequencyName: product.FrequencyUse, // 频次名称
UseDays: useDays, // 使用天数
}
drugRequests[i] = drugRequest
// 药品数据2
orderDrugRequest := prescription.OrderDrugRequest{
DrugCode: product.ProductPlatformCode, // 药品编码
ApprovalNumber: product.LicenseNumber, // 批准文号
DrugName: product.ProductName, // 药品名称
Specifications: product.ProductSpec, // 药品规格
Price: product.ProductPrice, // 药品单价
DrugCount: o.Amount, // 药品数量
PackingUnit: product.PackagingUnit, // 药品单位
}
orderDrugRequests[i] = orderDrugRequest
}
// 处理上传数据-处方数据
presRequests := make([]prescription.PresRequest, 1)
presRequest := prescription.PresRequest{
PrescriptionNo: orderPrescription.PrescriptionCode, // // 处方编号
PrescriptionSubType: 1, // 处方类型 0:无类型 1:普 通处方 2:儿科处 方
PatientName: orderPrescription.PatientName, // 就诊人姓名
PatientPhone: user.Mobile, // 就诊人联系方式
IdCard: patientFamily.IdNumber, // 身份证号
Advice: orderPrescription.DoctorAdvice, // 医嘱
DiagnosisName: icdNameStr, // 诊断
ThirdDoctorName: userDoctor.UserName, // 开方医生姓名
ThirdDeptName: hospitalDepartmentCustom.DepartmentName, // 开方科室名称
ThirdDoctorNameImg: utils.AddOssDomain(userDoctorInfo.SignImage),
PrescriptionTime: time.Time(orderPrescription.DoctorCreatedTime).Format("2006-01-02 15:04:05"),
ThirdFirstPharmacist: userPharmacist.UserName,
ThirdFirstPharmacistImg: utils.AddOssDomain(userPharmacistInfo.SignImage),
ThirdFirstTime: time.Time(orderPrescription.PharmacistVerifyTime).Format("2006-01-02 15:04:05"),
ThirdLastPharmacist: userPharmacist.UserName,
ThirdLastPharmacistImg: utils.AddOssDomain(userPharmacistInfo.SignImage),
ThirdLastTime: time.Time(orderPrescription.PharmacistVerifyTime).Format("2006-01-02 15:04:05"),
ThirdSignImg: utils.AddOssDomain("/basic/file/hospital_signature.png"),
ReferenceCharge: orderProduct.AmountTotal,
ChiefComplaint: orderInquiryCase.DiseaseDesc,
HistoryPresent: orderInquiryCase.DiseaseClassName,
PastHistory: orderInquiryCase.FamilyHistory,
PhysicalExamination: "无",
SupplementaryExamination: "无",
AllergicHistory: orderInquiryCase.AllergyHistory,
DrugList: drugRequests,
OrderDrugList: orderDrugRequests,
}
presRequests[0] = presRequest
// 处理上传数据-基础数据
ReportPreRequest := prescription.ReportPreRequest{
TerminalCode: "ZD-10003",
OrderNo: orderProduct.OrderProductNo, // 订单编号
TransactNo: orderProduct.EscrowTradeNo, // 流水单号
PayDate: time.Time(orderProduct.PayTime).Format("2006-01-02 15:04:05"), // 支付时间
Money: orderProduct.PaymentAmountTotal, // 订单金额
Freight: orderProduct.LogisticsFee, // 运费(单位:元)
TakeTypeCode: 2, // 取货方式 1 自提 2 快递,目前只支持快递,传固定值 2
BuyerName: orderProduct.ConsigneeName, // 收货人姓名
BuyerPhone: orderProduct.ConsigneeTel, // 收货人联系方式
BuyerAddress: orderProduct.Address, // 收货人地址
ProvinceCode: fmt.Sprintf("%d", orderProduct.ProvinceId), // 收货地址(省) 编码
ProvinceName: orderProduct.Province, // 收货地址(省) 名称
CityCode: fmt.Sprintf("%d", orderProduct.CityId), // 收货地址(市) 编码
CityName: orderProduct.City, // 收货地址(市) 名称
DistrictCode: fmt.Sprintf("%d", orderProduct.CountyId), // 收货地址(区 县)编码
DistrictName: orderProduct.County, // 收货地址(区 县)名称
PresList: presRequests,
}
fmt.Println(ReportPreRequest)
return true, nil
}
+3 -3
View File
@@ -168,7 +168,7 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, req requests.PutUserDo
}
if userDoctor.DepartmentCustomId != departmentCustomId || userDoctor.DepartmentCustomName != req.DepartmentCustomName {
// 获取科室数据
hospitalDepartmentCustomDao := dao.HospitalDepartmentCustom{}
hospitalDepartmentCustomDao := dao.HospitalDepartmentCustomDao{}
hospitalDepartmentCustom, err := hospitalDepartmentCustomDao.GetHospitalDepartmentCustomById(departmentCustomId)
if err != nil || hospitalDepartmentCustom == nil {
return false, errors.New("科室错误")
@@ -802,7 +802,7 @@ func (r *UserDoctorService) AddUserDoctor(userId string, req requests.AddUserDoc
}
// 获取科室数据
hospitalDepartmentCustomDao := dao.HospitalDepartmentCustom{}
hospitalDepartmentCustomDao := dao.HospitalDepartmentCustomDao{}
hospitalDepartmentCustom, err := hospitalDepartmentCustomDao.GetHospitalDepartmentCustomById(departmentCustomId)
if err != nil || hospitalDepartmentCustom == nil {
return false, errors.New("科室错误")
@@ -1611,7 +1611,7 @@ func (r *UserDoctorService) PutMulti(doctorId int64, req requests.PutMulti) (boo
userCaCert, _ := userCaCertDao.GetUserCaCertByUserId(userDoctor.UserId)
// 获取自定义科室数据
hospitalDepartmentCustomDao := dao.HospitalDepartmentCustom{}
hospitalDepartmentCustomDao := dao.HospitalDepartmentCustomDao{}
hospitalDepartmentCustom, err := hospitalDepartmentCustomDao.GetHospitalDepartmentCustomById(userDoctor.DepartmentCustomId)
if err != nil || hospitalDepartmentCustom == nil {
tx.Rollback()