diff --git a/api/controller/area.go b/api/controller/area.go index 78791c9..abf04c6 100644 --- a/api/controller/area.go +++ b/api/controller/area.go @@ -6,22 +6,25 @@ import ( "hospital-admin-api/api/dto" "hospital-admin-api/api/requests" "hospital-admin-api/api/responses" + "hospital-admin-api/api/service" "hospital-admin-api/global" "hospital-admin-api/utils" + "strconv" ) type Area struct{} // GetAreaList 获取地区列表 func (b *Area) GetAreaList(c *gin.Context) { - req := requests.AreaRequest{} - if err := c.ShouldBind(&req.GetAreaList); err != nil { + areaRequest := requests.AreaRequest{} + req := areaRequest.GetAreaList + if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 - if err := global.Validate.Struct(req.GetAreaList); err != nil { + if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } @@ -33,7 +36,7 @@ func (b *Area) GetAreaList(c *gin.Context) { } areaDao := dao.AreaDao{} - area, err := areaDao.GetAreaListByStruct(req.GetAreaList) + area, err := areaDao.GetAreaListByStruct(req) if err != nil { responses.Ok(c) return @@ -43,3 +46,67 @@ func (b *Area) GetAreaList(c *gin.Context) { r := dto.GetAreaListDto(area) responses.OkWithData(r, c) } + +// AddArea 新增地区 +func (r *Area) AddArea(c *gin.Context) { + areaRequest := requests.AreaRequest{} + req := areaRequest.AddArea + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 业务处理 + areaService := service.AreaService{} + _, areaId, err := areaService.AddArea(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(areaId, c) +} + +// PutArea 修改地区 +func (r *Area) PutArea(c *gin.Context) { + areaRequest := requests.AreaRequest{} + req := areaRequest.PutArea + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + id := c.Param("area_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + areaId, err := strconv.Atoi(id) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + areaService := service.AreaService{} + _, err = areaService.PutArea(areaId, req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + responses.Ok(c) +} diff --git a/api/controller/base.go b/api/controller/base.go index 43c0228..0b9e332 100644 --- a/api/controller/base.go +++ b/api/controller/base.go @@ -16,6 +16,8 @@ type Api struct { financeManage // 财务管理 exportManage // 导出管理 productManage // 商品管理 + couponManage // 优惠卷管理 + basicManage // 基础数据管理 } // SysSetting 系统设置 @@ -40,14 +42,14 @@ type basic struct { Hospital // 医院管理 DiseaseClassExpertise // 专长管理 Bank // 银行管理 - Area // 省市区管理 } // 订单管理 type order struct { - Order // 订单 - OrderInquiry // 问诊订单 - OrderProduct // 药品订单 + Order // 订单 + OrderInquiry // 问诊订单 + OrderProduct // 药品订单 + OrderServicePackage // 服务包订单 } // 患者管理 @@ -68,7 +70,10 @@ type orderPrescriptionManage struct { // 问诊管理 type inquiryManage struct { - InquiryConfig // 问诊配置 + InquiryConfig // 问诊配置 + HealthPackage // 系统健康包配置 + DoctorConfigHealthPackage // 医生健康包配置 + DoctorConfigFollowPackage // 医生随访包配置 } // ca管理 @@ -90,3 +95,13 @@ type exportManage struct { type productManage struct { Product } + +// 优惠卷管理 +type couponManage struct { + Coupon +} + +// 基础数据管理 +type basicManage struct { + Basic +} diff --git a/api/controller/basic.go b/api/controller/basic.go index b0b429f..9683a6b 100644 --- a/api/controller/basic.go +++ b/api/controller/basic.go @@ -1 +1,5 @@ package controller + +type Basic struct { + Area // 省市区 +} diff --git a/api/controller/coupon.go b/api/controller/coupon.go new file mode 100644 index 0000000..ca3021c --- /dev/null +++ b/api/controller/coupon.go @@ -0,0 +1,281 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/requests" + "hospital-admin-api/api/responses" + "hospital-admin-api/api/service" + "hospital-admin-api/global" + "hospital-admin-api/utils" + "strconv" +) + +type Coupon struct{} + +// GetSystemCouponPage 获取系统优惠卷列表-分页 +func (r *Coupon) GetSystemCouponPage(c *gin.Context) { + couponRequest := requests.CouponRequest{} + req := couponRequest.GetSystemCouponPage + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + if req.Page == 0 { + req.Page = 1 + } + + if req.PageSize == 0 { + req.PageSize = 20 + } + + couponDao := dao.CouponDao{} + coupon, total, err := couponDao.GetCouponPageSearch(req, req.Page, req.PageSize) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + GetProductPlatformPageResponses := dto.GetCouponListDto(coupon) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + result := make(map[string]interface{}) + result["page"] = req.Page + result["page_size"] = req.PageSize + result["total"] = total + result["data"] = GetProductPlatformPageResponses + responses.OkWithData(result, c) +} + +// GetSystemCoupon 系统优惠卷详情 +func (r *Coupon) GetSystemCoupon(c *gin.Context) { + id := c.Param("coupon_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + couponId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + couponService := service.CouponService{} + getSystemCouponResponses, err := couponService.GetSystemCoupon(couponId) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(getSystemCouponResponses, c) +} + +// AddSystemCoupon 新增系统优惠卷 +func (r *Coupon) AddSystemCoupon(c *gin.Context) { + couponRequest := requests.CouponRequest{} + req := couponRequest.AddSystemCoupon + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 业务处理 + couponService := service.CouponService{} + _, err := couponService.AddSystemCoupon(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} + +// PutSystemCoupon 修改系统优惠卷 +func (r *Coupon) PutSystemCoupon(c *gin.Context) { + couponRequest := requests.CouponRequest{} + req := couponRequest.PutSystemCoupon + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + id := c.Param("coupon_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + couponId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + couponService := service.CouponService{} + _, err = couponService.PutSystemCoupon(couponId, req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} + +// PutSystemCouponStatus 修改系统优惠卷状态 +func (r *Coupon) PutSystemCouponStatus(c *gin.Context) { + couponRequest := requests.CouponRequest{} + req := couponRequest.PutSystemCouponStatus + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + id := c.Param("coupon_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + couponId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + couponService := service.CouponService{} + _, err = couponService.PutSystemCouponStatus(couponId, req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} + +// GetUserCouponPage 获取用户优惠卷列表-分页 +func (r *Coupon) GetUserCouponPage(c *gin.Context) { + couponRequest := requests.CouponRequest{} + req := couponRequest.GetUserCouponPage + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + if req.Page == 0 { + req.Page = 1 + } + + if req.PageSize == 0 { + req.PageSize = 20 + } + + userCouponDao := dao.UserCouponDao{} + userCoupon, total, err := userCouponDao.GetUserCouponPageSearch(req, req.Page, req.PageSize) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + GetProductPlatformPageResponses := dto.GetUserCouponListDto(userCoupon) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + result := make(map[string]interface{}) + result["page"] = req.Page + result["page_size"] = req.PageSize + result["total"] = total + result["data"] = GetProductPlatformPageResponses + responses.OkWithData(result, c) +} + +// GrantSystemCoupon 发放系统优惠卷 +func (r *Coupon) GrantSystemCoupon(c *gin.Context) { + couponRequest := requests.CouponRequest{} + req := couponRequest.GrantSystemCoupon + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + id := c.Param("coupon_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + couponId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 获取当前登陆用户id + userId := c.GetInt64("UserId") + if userId == 0 { + responses.FailWithMessage("角色错误", c) + return + } + + // 业务处理 + couponService := service.CouponService{} + _, err = couponService.GrantSystemCoupon(couponId, userId, req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} diff --git a/api/controller/doctorConfigFollowPackage.go b/api/controller/doctorConfigFollowPackage.go new file mode 100644 index 0000000..5d5f658 --- /dev/null +++ b/api/controller/doctorConfigFollowPackage.go @@ -0,0 +1,159 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/requests" + "hospital-admin-api/api/responses" + "hospital-admin-api/api/service" + "hospital-admin-api/global" + "hospital-admin-api/utils" + "strconv" +) + +type DoctorConfigFollowPackage struct{} + +// GetDoctorFollowPage 获取开启随访包服务的医生-分页 +func (r *DoctorConfigFollowPackage) GetDoctorFollowPage(c *gin.Context) { + DoctorConfigFollowPackageRequest := requests.DoctorConfigFollowPackageRequest{} + req := DoctorConfigFollowPackageRequest.GetDoctorFollowPage + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + if req.Page == 0 { + req.Page = 1 + } + + if req.PageSize == 0 { + req.PageSize = 20 + } + + doctorConfigFollowPackageDao := dao.DoctorConfigFollowPackageDao{} + DoctorConfigFollowPackage, total, err := doctorConfigFollowPackageDao.GetDoctorFollowPageSearch(req, req.Page, req.PageSize) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + res := dto.GetDoctorConfigFollowPackageListDto(DoctorConfigFollowPackage) + + doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} + for _, v := range res { + maps := make(map[string]interface{}) + maps["doctor_id"] = v.DoctorId + maps["inquiry_type"] = 1 + maps["inquiry_mode"] = 9 + doctorInquiryConfig, _ := doctorInquiryConfigDao.GetDoctorInquiryConfig(maps) + if doctorInquiryConfig != nil { + v.LoadDoctorInquiryConfig(doctorInquiryConfig) + } + } + + result := make(map[string]interface{}) + result["page"] = req.Page + result["page_size"] = req.PageSize + result["total"] = total + result["data"] = res + responses.OkWithData(result, c) +} + +// GetDoctorFollow 医生随访包配置详情 +func (r *DoctorConfigFollowPackage) GetDoctorFollow(c *gin.Context) { + id := c.Param("follow_package_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + followPackageId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + DoctorConfigFollowPackageService := service.DoctorConfigFollowPackageService{} + getUserDoctorResponses, err := DoctorConfigFollowPackageService.GetDoctorFollow(followPackageId) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(getUserDoctorResponses, c) +} + +// PutDoctorFollow 修改医生随访包配置 +func (r *DoctorConfigFollowPackage) PutDoctorFollow(c *gin.Context) { + DoctorConfigFollowPackageRequest := requests.DoctorConfigFollowPackageRequest{} + req := DoctorConfigFollowPackageRequest.PutDoctorFollow + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + id := c.Param("follow_package_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + followPackageId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + DoctorConfigFollowPackageService := service.DoctorConfigFollowPackageService{} + _, err = DoctorConfigFollowPackageService.PutDoctorFollow(followPackageId, req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} + +// AddDoctorFollow 新增医生随访包配置 +func (r *DoctorConfigFollowPackage) AddDoctorFollow(c *gin.Context) { + DoctorConfigFollowPackageRequest := requests.DoctorConfigFollowPackageRequest{} + req := DoctorConfigFollowPackageRequest.AddDoctorFollow + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 业务处理 + DoctorConfigFollowPackageService := service.DoctorConfigFollowPackageService{} + _, err := DoctorConfigFollowPackageService.AddDoctorFollow(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} diff --git a/api/controller/doctorConfigHealthPackage.go b/api/controller/doctorConfigHealthPackage.go new file mode 100644 index 0000000..cbcad42 --- /dev/null +++ b/api/controller/doctorConfigHealthPackage.go @@ -0,0 +1,159 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/requests" + "hospital-admin-api/api/responses" + "hospital-admin-api/api/service" + "hospital-admin-api/global" + "hospital-admin-api/utils" + "strconv" +) + +type DoctorConfigHealthPackage struct{} + +// GetDoctorHealthPage 获取开启健康包服务的医生-分页 +func (r *DoctorConfigHealthPackage) GetDoctorHealthPage(c *gin.Context) { + doctorConfigHealthPackageRequest := requests.DoctorConfigHealthPackageRequest{} + req := doctorConfigHealthPackageRequest.GetDoctorHealthPage + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + if req.Page == 0 { + req.Page = 1 + } + + if req.PageSize == 0 { + req.PageSize = 20 + } + + doctorConfigHealthPackageDao := dao.DoctorConfigHealthPackageDao{} + doctorConfigHealthPackage, total, err := doctorConfigHealthPackageDao.GetDoctorHealthPageSearch(req, req.Page, req.PageSize) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + res := dto.GetDoctorConfigHealthPackageListDto(doctorConfigHealthPackage) + + doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} + for _, v := range res { + maps := make(map[string]interface{}) + maps["doctor_id"] = v.DoctorId + maps["inquiry_type"] = 1 + maps["inquiry_mode"] = 8 + doctorInquiryConfig, _ := doctorInquiryConfigDao.GetDoctorInquiryConfig(maps) + if doctorInquiryConfig != nil { + v.LoadDoctorInquiryConfig(doctorInquiryConfig) + } + } + + result := make(map[string]interface{}) + result["page"] = req.Page + result["page_size"] = req.PageSize + result["total"] = total + result["data"] = res + responses.OkWithData(result, c) +} + +// GetDoctorHealth 医生健康包配置详情 +func (r *DoctorConfigHealthPackage) GetDoctorHealth(c *gin.Context) { + id := c.Param("health_package_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + healthPackageId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + doctorConfigHealthPackageService := service.DoctorConfigHealthPackageService{} + getUserDoctorResponses, err := doctorConfigHealthPackageService.GetDoctorHealth(healthPackageId) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(getUserDoctorResponses, c) +} + +// PutDoctorHealth 修改医生健康包配置 +func (r *DoctorConfigHealthPackage) PutDoctorHealth(c *gin.Context) { + doctorConfigHealthPackageRequest := requests.DoctorConfigHealthPackageRequest{} + req := doctorConfigHealthPackageRequest.PutDoctorHealth + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + id := c.Param("health_package_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + healthPackageId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + doctorConfigHealthPackageService := service.DoctorConfigHealthPackageService{} + _, err = doctorConfigHealthPackageService.PutDoctorHealth(healthPackageId, req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} + +// AddDoctorHealth 新增医生健康包配置 +func (r *DoctorConfigHealthPackage) AddDoctorHealth(c *gin.Context) { + doctorConfigHealthPackageRequest := requests.DoctorConfigHealthPackageRequest{} + req := doctorConfigHealthPackageRequest.AddDoctorHealth + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 业务处理 + doctorConfigHealthPackageService := service.DoctorConfigHealthPackageService{} + _, err := doctorConfigHealthPackageService.AddDoctorHealth(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} diff --git a/api/controller/export.go b/api/controller/export.go index 7153f0c..9a115da 100644 --- a/api/controller/export.go +++ b/api/controller/export.go @@ -546,3 +546,100 @@ func (r *Export) OrderPrescription(c *gin.Context) { responses.OkWithData(ossAddress, c) } + +// Product 系统药品 +func (r *Export) Product(c *gin.Context) { + productRequest := requests.ProductRequest{} + req := productRequest.ProductExportList + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 获取数据 + productDao := dao.ProductDao{} + products, err := productDao.GetProductExportListSearch(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 业务处理 + exportService := service.ExportService{} + ossAddress, err := exportService.Product(products) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 获取当前登陆用户id + userId := c.GetInt64("UserId") + if userId != 0 { + // 记录日志 + logExport := &model.LogExport{ + AdminUserId: userId, + ExportModule: "处方", + ExportFile: utils.RemoveOssDomain(ossAddress), + } + + logExportDao := dao.LogExportDao{} + _, _ = logExportDao.AddLogExportUnTransaction(logExport) + } + + responses.OkWithData(ossAddress, c) +} + +// OrderService 服务包订单 +func (r *Export) OrderService(c *gin.Context) { + orderServicePackageRequest := requests.OrderServicePackageRequest{} + req := orderServicePackageRequest.OrderServicePackageExportList + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 获取数据 + orderServicePackageDao := dao.OrderServicePackageDao{} + orderServicePackage, err := orderServicePackageDao.GetOrderServicePackageExportListSearch(req) + + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 业务处理 + exportService := service.ExportService{} + ossAddress, err := exportService.OrderServicePackage(orderServicePackage) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 获取当前登陆用户id + userId := c.GetInt64("UserId") + if userId != 0 { + // 记录日志 + logExport := &model.LogExport{ + AdminUserId: userId, + ExportModule: "服务包订单", + ExportFile: utils.RemoveOssDomain(ossAddress), + } + + logExportDao := dao.LogExportDao{} + _, _ = logExportDao.AddLogExportUnTransaction(logExport) + } + + responses.OkWithData(ossAddress, c) +} diff --git a/api/controller/healthPackage.go b/api/controller/healthPackage.go new file mode 100644 index 0000000..6efbf9b --- /dev/null +++ b/api/controller/healthPackage.go @@ -0,0 +1,180 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/requests" + "hospital-admin-api/api/responses" + "hospital-admin-api/api/service" + "hospital-admin-api/global" + "hospital-admin-api/utils" + "strconv" +) + +type HealthPackage struct{} + +// GetHealthPackagePage 获取健康包列表-分页 +func (r *HealthPackage) GetHealthPackagePage(c *gin.Context) { + healthPackageRequest := requests.HealthPackageRequest{} + req := healthPackageRequest.GetHealthPackagePage + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + if req.Page == 0 { + req.Page = 1 + } + + if req.PageSize == 0 { + req.PageSize = 20 + } + + healthPackageDao := dao.HealthPackageDao{} + healthPackage, total, err := healthPackageDao.GetHealthPackagePageSearch(req, req.Page, req.PageSize) + + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + res := dto.GetHealthPackageListDto(healthPackage) + + result := make(map[string]interface{}) + result["page"] = req.Page + result["page_size"] = req.PageSize + result["total"] = total + result["data"] = res + responses.OkWithData(result, c) +} + +// GetHealthPackageList 获取健康包列表-限制条数 +func (r *HealthPackage) GetHealthPackageList(c *gin.Context) { + healthPackageRequest := requests.HealthPackageRequest{} + req := healthPackageRequest.GetHealthPackageList + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + healthPackageDao := dao.HealthPackageDao{} + healthPackage, err := healthPackageDao.GetHealthPackageListSearch(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + getHealthPackageListResponses := dto.GetHealthPackageListDto(healthPackage) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(getHealthPackageListResponses, c) +} + +// GetHealthPackage 获取健康包详情 +func (r *HealthPackage) GetHealthPackage(c *gin.Context) { + id := c.Param("package_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + packageId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + healthPackageService := service.HealthPackageService{} + getResponses, err := healthPackageService.GetHealthPackage(packageId) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(getResponses, c) +} + +// PutHealthPackage 修改健康包 +func (r *HealthPackage) PutHealthPackage(c *gin.Context) { + healthPackageRequest := requests.HealthPackageRequest{} + req := healthPackageRequest.PutHealthPackage + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + id := c.Param("package_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + packageId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + healthPackageService := service.HealthPackageService{} + _, err = healthPackageService.PutHealthPackage(packageId, req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} + +// AddHealthPackage 新增健康包 +func (r *HealthPackage) AddHealthPackage(c *gin.Context) { + healthPackageRequest := requests.HealthPackageRequest{} + req := healthPackageRequest.AddHealthPackage + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 业务处理 + healthPackageService := service.HealthPackageService{} + _, err := healthPackageService.AddHealthPackage(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} diff --git a/api/controller/hospital.go b/api/controller/hospital.go index b33077d..87768f4 100644 --- a/api/controller/hospital.go +++ b/api/controller/hospital.go @@ -7,28 +7,31 @@ import ( "hospital-admin-api/api/dto" "hospital-admin-api/api/requests" "hospital-admin-api/api/responses" + "hospital-admin-api/api/service" "hospital-admin-api/global" "hospital-admin-api/utils" + "strconv" ) type Hospital struct{} -// GetHospitalLimit 获取医院列表-限制条数 -func (b *Hospital) GetHospitalLimit(c *gin.Context) { +// GetHospitalList 获取医院列表 +func (b *Hospital) GetHospitalList(c *gin.Context) { hospitalRequest := requests.HospitalRequest{} - if err := c.ShouldBind(&hospitalRequest.GetHospitalLimit); err != nil { + req := hospitalRequest.GetHospitalList + if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 - if err := global.Validate.Struct(hospitalRequest.GetHospitalLimit); err != nil { + if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } - hospitalDao := dao.Hospital{} - hospitals, err := hospitalDao.GetHospitalLimitByMaps(hospitalRequest.GetHospitalLimit) + hospitalDao := dao.HospitalDao{} + hospitals, err := hospitalDao.GetHospitalLimitByMaps(req) if err != nil { responses.Ok(c) return @@ -38,3 +41,134 @@ func (b *Hospital) GetHospitalLimit(c *gin.Context) { getHospitalLimitResponse := dto.GetHospitalListDto(hospitals) responses.OkWithData(getHospitalLimitResponse, c) } + +// GetHospitalPage 获取医院列表-分页 +func (r *Hospital) GetHospitalPage(c *gin.Context) { + hospitalRequest := requests.HospitalRequest{} + req := hospitalRequest.GetHospitalPage + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + if req.Page == 0 { + req.Page = 1 + } + + if req.PageSize == 0 { + req.PageSize = 20 + } + + hospitalDao := dao.HospitalDao{} + hospital, total, err := hospitalDao.GetHospitalPageSearch(req, req.Page, req.PageSize) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + GetHospitalPageResponses := dto.GetHospitalListDto(hospital) + + result := make(map[string]interface{}) + result["page"] = req.Page + result["page_size"] = req.PageSize + result["total"] = total + result["data"] = GetHospitalPageResponses + responses.OkWithData(result, c) +} + +// AddHospital 新增医院 +func (r *Hospital) AddHospital(c *gin.Context) { + hospitalRequest := requests.HospitalRequest{} + req := hospitalRequest.AddHospital + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 业务处理 + hospitalService := service.HospitalService{} + _, err := hospitalService.AddHospital(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} + +// PutHospital 修改医院 +func (r *Hospital) PutHospital(c *gin.Context) { + hospitalRequest := requests.HospitalRequest{} + req := hospitalRequest.PutHospital + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + id := c.Param("hospital_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + hospitalId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + hospitalService := service.HospitalService{} + _, err = hospitalService.PutHospital(hospitalId, req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + responses.Ok(c) +} + +// GetHospital 医院详情 +func (r *Hospital) GetHospital(c *gin.Context) { + id := c.Param("hospital_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + hospitalId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + hospitalService := service.HospitalService{} + getHospitalResponses, err := hospitalService.GetHospital(hospitalId) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(getHospitalResponses, c) +} diff --git a/api/controller/inquiryConfig.go b/api/controller/inquiryConfig.go index 552514c..28664f0 100644 --- a/api/controller/inquiryConfig.go +++ b/api/controller/inquiryConfig.go @@ -17,28 +17,29 @@ type InquiryConfig struct{} // GetDoctorInquiryConfigPage 获取开启问诊配置医生列表-分页 func (r *InquiryConfig) GetDoctorInquiryConfigPage(c *gin.Context) { - req := requests.InquiryConfigRequest{} - if err := c.ShouldBind(&req.GetDoctorInquiryConfigPage); err != nil { + inquiryConfigRequest := requests.InquiryConfigRequest{} + req := inquiryConfigRequest.GetDoctorInquiryConfigPage + if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 - if err := global.Validate.Struct(req.GetDoctorInquiryConfigPage); err != nil { + if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } - if req.GetDoctorInquiryConfigPage.Page == 0 { - req.GetDoctorInquiryConfigPage.Page = 1 + if req.Page == 0 { + req.Page = 1 } - if req.GetDoctorInquiryConfigPage.PageSize == 0 { - req.GetDoctorInquiryConfigPage.PageSize = 20 + if req.PageSize == 0 { + req.PageSize = 20 } doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} - doctorInquiryConfig, total, err := doctorInquiryConfigDao.GetUserDoctorPageSearch(req.GetDoctorInquiryConfigPage, req.GetDoctorInquiryConfigPage.Page, req.GetDoctorInquiryConfigPage.PageSize) + doctorInquiryConfig, total, err := doctorInquiryConfigDao.GetUserDoctorPageSearch(req, req.Page, req.PageSize) if err != nil { responses.FailWithMessage(err.Error(), c) @@ -49,8 +50,8 @@ func (r *InquiryConfig) GetDoctorInquiryConfigPage(c *gin.Context) { res := dto.GetDoctorInquiryConfigListDto(doctorInquiryConfig) result := make(map[string]interface{}) - result["page"] = req.GetDoctorInquiryConfigPage.Page - result["page_size"] = req.GetDoctorInquiryConfigPage.PageSize + result["page"] = req.Page + result["page_size"] = req.PageSize result["total"] = total result["data"] = res responses.OkWithData(result, c) @@ -58,22 +59,22 @@ func (r *InquiryConfig) GetDoctorInquiryConfigPage(c *gin.Context) { // GetDoctorInquiryConfig 医生问诊配置详情 func (r *InquiryConfig) GetDoctorInquiryConfig(c *gin.Context) { - id := c.Param("inquiry_config_id") - if id == "" { - responses.FailWithMessage("缺少参数", c) + inquiryConfigRequest := requests.InquiryConfigRequest{} + req := inquiryConfigRequest.GetDoctorInquiryConfig + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) return } - // 将 id 转换为 int64 类型 - inquiryConfigId, err := strconv.ParseInt(id, 10, 64) - if err != nil { - responses.Fail(c) + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) return } // 业务处理 inquiryConfigService := service.InquiryConfigService{} - getUserDoctorResponses, err := inquiryConfigService.GetDoctorInquiryConfig(inquiryConfigId) + getUserDoctorResponses, err := inquiryConfigService.GetDoctorInquiryConfig(req) if err != nil { responses.FailWithMessage(err.Error(), c) return @@ -110,6 +111,11 @@ func (r *InquiryConfig) PutDoctorInquiryConfig(c *gin.Context) { return } + if req.InquiryMode == 6 { + responses.FailWithMessage("疑难问诊暂不可使用", c) + return + } + // 业务处理 doctorInquiryConfigService := service.DoctorInquiryConfigService{} _, err = doctorInquiryConfigService.PutDoctorInquiryConfig(inquiryConfigId, req) diff --git a/api/controller/orderInquiry.go b/api/controller/orderInquiry.go index 434e239..d898390 100644 --- a/api/controller/orderInquiry.go +++ b/api/controller/orderInquiry.go @@ -87,6 +87,17 @@ func (r *OrderInquiry) GetOrderInquiry(c *gin.Context) { // CancelOrderInquiry 取消问诊订单 func (r *OrderInquiry) CancelOrderInquiry(c *gin.Context) { + //OrderService := service.OrderService{} + // + //_, err := OrderService.PdfToImg() + //if err != nil { + // responses.FailWithMessage(err.Error(), c) + // return + //} + // + //responses.Ok(c) + //return + id := c.Param("order_inquiry_id") if id == "" { responses.FailWithMessage("缺少参数", c) @@ -100,24 +111,30 @@ func (r *OrderInquiry) CancelOrderInquiry(c *gin.Context) { return } - req := requests.OrderInquiryRequest{} - if err := c.ShouldBind(&req.CancelOrderInquiry); err != nil { + orderInquiryRequest := requests.OrderInquiryRequest{} + req := orderInquiryRequest.CancelOrderInquiry + if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 - if err := global.Validate.Struct(req.CancelOrderInquiry); err != nil { + if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } + if req.RefundAmount == nil { + responses.FailWithMessage("退款金额不可为空", c) + return + } + // 后台用户id adminUserId := c.GetInt64("UserId") // 业务处理 orderInquiryService := service.OrderInquiryService{} - _, err = orderInquiryService.CancelOrderInquiry(req.CancelOrderInquiry, orderInquiryId, adminUserId) + _, err = orderInquiryService.CancelOrderInquiry(req, orderInquiryId, adminUserId) if err != nil { responses.FailWithMessage(err.Error(), c) return diff --git a/api/controller/orderServicePackage.go b/api/controller/orderServicePackage.go new file mode 100644 index 0000000..cecd7a7 --- /dev/null +++ b/api/controller/orderServicePackage.go @@ -0,0 +1,159 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/requests" + "hospital-admin-api/api/responses" + "hospital-admin-api/api/service" + "hospital-admin-api/global" + "hospital-admin-api/utils" + "strconv" +) + +type OrderServicePackage struct{} + +// GetOrderServicePackagePage 获取服务包订单列表-分页 +func (r *OrderServicePackage) GetOrderServicePackagePage(c *gin.Context) { + orderServicePackageRequest := requests.OrderServicePackageRequest{} + req := orderServicePackageRequest.GetOrderServicePackagePage + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + if req.Page == 0 { + req.Page = 1 + } + + if req.PageSize == 0 { + req.PageSize = 20 + } + + orderServicePackageDao := dao.OrderServicePackageDao{} + orderServicePackage, total, err := orderServicePackageDao.GetOrderServicePackagePageSearch(req, req.Page, req.PageSize) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + GetOrderInquiryPageResponses := dto.GetOrderServicePackageListDto(orderServicePackage) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + result := make(map[string]interface{}) + result["page"] = req.Page + result["page_size"] = req.PageSize + result["total"] = total + result["data"] = GetOrderInquiryPageResponses + responses.OkWithData(result, c) +} + +// GetOrderServicePackage 获取服务包订单详情 +func (r *OrderServicePackage) GetOrderServicePackage(c *gin.Context) { + id := c.Param("order_service_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + orderServiceId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + orderServicePackageService := service.OrderServicePackageService{} + getResponses, err := orderServicePackageService.GetOrderServicePackage(orderServiceId) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(getResponses, c) +} + +// GetOrderServicePackageDetailInfo 获取服务包订单服务权益详情 +func (r *OrderServicePackage) GetOrderServicePackageDetailInfo(c *gin.Context) { + id := c.Param("order_service_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + orderServiceId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + orderServicePackageService := service.OrderServicePackageService{} + getResponses, err := orderServicePackageService.GetOrderServicePackageDetailInfo(orderServiceId) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(getResponses, c) +} + +// CancelOrderServicePackage 取消服务包订单 +func (r *OrderServicePackage) CancelOrderServicePackage(c *gin.Context) { + id := c.Param("order_service_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + orderServiceId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + orderServicePackageRequest := requests.OrderServicePackageRequest{} + req := orderServicePackageRequest.CancelOrderServicePackage + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + if req.RefundAmount == nil { + responses.FailWithMessage("退款金额不可为空", c) + return + } + + // 后台用户id + adminUserId := c.GetInt64("UserId") + + // 业务处理 + orderServicePackageService := service.OrderServicePackageService{} + _, err = orderServicePackageService.CancelOrderServicePackage(req, orderServiceId, adminUserId) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} diff --git a/api/controller/product.go b/api/controller/product.go index 30f366c..2bf2711 100644 --- a/api/controller/product.go +++ b/api/controller/product.go @@ -89,7 +89,7 @@ func (r *Product) GetProductPlatform(c *gin.Context) { func (r *Product) GetProductPage(c *gin.Context) { productRequest := requests.ProductRequest{} req := productRequest.GetProductPage - if err := c.ShouldBind(&req); err != nil { + if err := c.ShouldBindJSON(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } @@ -300,3 +300,35 @@ func (r *Product) GetPlatformProductList(c *gin.Context) { responses.OkWithData(productPlatforms, c) } + +// GetProductList 获取系统商品列表-限制条数 +func (r *Product) GetProductList(c *gin.Context) { + productRequest := requests.ProductRequest{} + req := productRequest.GetProductList + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + productDao := dao.ProductDao{} + product, err := productDao.GetProductListSearch(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + getProductListResponses := dto.GetProductListDto(product) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(getProductListResponses, c) +} diff --git a/api/controller/userPatient.go b/api/controller/userPatient.go index 341d38f..2508c01 100644 --- a/api/controller/userPatient.go +++ b/api/controller/userPatient.go @@ -118,3 +118,30 @@ func (r *UserPatient) PutUserDoctorStatus(c *gin.Context) { responses.Ok(c) } + +// GetUserPatientList 获取患者列表-限制条数 +func (r *UserPatient) GetUserPatientList(c *gin.Context) { + userPatientRequest := requests.UserPatientRequest{} + req := userPatientRequest.GetUserPatientList + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + userPatientDao := dao.UserPatientDao{} + userPatient, err := userPatientDao.GetUserPatientListSearch(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + getUserPatientListResponses := dto.GetUserPatientListDto(userPatient) + responses.OkWithData(getUserPatientListResponses, c) +} diff --git a/api/dao/coupon.go b/api/dao/coupon.go new file mode 100644 index 0000000..224160d --- /dev/null +++ b/api/dao/coupon.go @@ -0,0 +1,190 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" + "strings" + "time" +) + +type CouponDao struct { +} + +// GetCouponById 获取数据-id +func (r *CouponDao) GetCouponById(couponId int64) (m *model.Coupon, err error) { + err = global.Db.First(&m, couponId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetCouponPreloadById 获取数据-加载全部关联-id +func (r *CouponDao) GetCouponPreloadById(couponId int64) (m *model.Coupon, err error) { + err = global.Db.Preload(clause.Associations).First(&m, couponId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// EditCoupon 修改 +func (r *CouponDao) EditCoupon(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.Coupon{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditCouponById 修改 +func (r *CouponDao) EditCouponById(tx *gorm.DB, couponId int64, data interface{}) error { + err := tx.Model(&model.Coupon{}).Where("coupon_id = ?", couponId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetCouponList 获取列表 +func (r *CouponDao) GetCouponList(maps interface{}) (m []*model.Coupon, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddCoupon 新增 +func (r *CouponDao) AddCoupon(tx *gorm.DB, model *model.Coupon) (*model.Coupon, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// GetCouponPageSearch 获取列表-分页 +func (r *CouponDao) GetCouponPageSearch(req requests.GetSystemCouponPage, page, pageSize int) (m []*model.Coupon, total int64, err error) { + var totalRecords int64 + + // 构建查询条件 + query := global.Db.Model(&model.Coupon{}) + + // 优惠卷名称 + if req.CouponName != "" { + query = query.Where("coupon_name LIKE ?", "%"+req.CouponName+"%") + } + + // 优惠卷描述 + if req.CouponDesc != "" { + query = query.Where("coupon_desc LIKE ?", "%"+req.CouponDesc+"%") + } + + // 使用平台(1:小程序) + if req.CouponClient != nil { + query = query.Where("coupon_client = ?", req.CouponClient) + } + + // 优惠卷类型(1:无门槛 2:满减 3:数量 + if req.CouponType != nil { + query = query.Where("coupon_type = ?", req.CouponType) + } + + // 状态(1:正常 2:强制失效 3:结束 4:删除) + if req.CouponStatus != nil { + query = query.Where("coupon_status = ?", req.CouponStatus) + } + + // 发放对象(1:全部用户 2:新注册用户 3:会员 4:近期消费 5:近期购药 6:存量用户 7:健康包服务用户) + if req.DistributionObject != nil { + query = query.Where("distribution_object = ?", req.DistributionObject) + } + + // 适用范围(1:全场通用 2:问诊 3:按品牌适用 4:按类别适用 5:单品使用 6:全品类药品) + if req.ApplicationScope != nil { + query = query.Where("application_scope = ?", req.ApplicationScope) + } + + // 关联问诊类型,application_scope=问诊时存在生效,逗号分隔(1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药 6:检测) + if req.InquiryType != "" { + query = query.Where("inquiry_type = ?", req.InquiryType) + } + + // 关联品牌id(如不限制品牌,此项为空) + if req.BrandId != "" { + query = query.Where("brand_id = ?", req.BrandId) + } + + // 是否互斥(0:否 1:是)互斥情况下无法和其他优惠卷同时使用 + if req.IsMutex != nil { + query = query.Where("is_mutex = ?", req.IsMutex) + } + + // 是否展示(0:否 1:是) + if req.IsDisplay != nil { + query = query.Where("is_display = ?", req.IsDisplay) + } + + // 有效类型(1:绝对时效,xxx-xxx时间段有效 2:相对时效 n天内有效) + if req.ValidType != nil { + query = query.Where("valid_type = ?", req.ValidType) + } + + // 过期之后是否允许再次发放(0:否 1:是) + if req.IsReissuableAfterExpire != nil { + query = query.Where("is_reissuable_after_expire = ?", req.IsReissuableAfterExpire) + } + + // 是否首页弹窗(0:否 1:是) + if req.IsPopup != nil { + query = query.Where("is_popup = ?", req.IsPopup) + } + + // 创建时间 + if req.CreatedAt != "" { + createdAt := strings.Split(req.CreatedAt, "&") + if len(createdAt) == 2 { + startTime, _ := time.Parse("2006-01-02", createdAt[0]) + endTime, _ := time.Parse("2006-01-02", createdAt[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("created_at BETWEEN ? AND ?", startTime, endTime) + } + } + + // 排序 + query = query.Order("created_at desc") + + // 查询总数量 + if err := query.Count(&totalRecords).Error; err != nil { + return nil, 0, err + } + + err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error + if err != nil { + return nil, 0, err + } + return m, totalRecords, nil +} + +// Inc 自增 +func (r *CouponDao) Inc(tx *gorm.DB, couponId int64, field string, numeral int) error { + err := tx.Model(&model.Coupon{}).Where("coupon_id = ?", couponId).UpdateColumn("coupon_take_count", gorm.Expr(field+" + ?", numeral)).Error + if err != nil { + return err + } + return nil +} + +// Dec 自减 +func (r *CouponDao) Dec(tx *gorm.DB, couponId int64, field string, numeral int) error { + err := tx.Model(&model.Coupon{}).Where("coupon_id = ?", couponId).UpdateColumn("coupon_take_count", gorm.Expr(field+" - ?", numeral)).Error + if err != nil { + return err + } + return nil +} diff --git a/api/dao/couponGrant.go b/api/dao/couponGrant.go new file mode 100644 index 0000000..8859462 --- /dev/null +++ b/api/dao/couponGrant.go @@ -0,0 +1,64 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type CouponGrantDao struct { +} + +// GetCouponGrantById 获取数据-id +func (r *CouponGrantDao) GetCouponGrantById(couponId int64) (m *model.CouponGrant, err error) { + err = global.Db.First(&m, couponId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetCouponGrantPreloadById 获取数据-加载全部关联-id +func (r *CouponGrantDao) GetCouponGrantPreloadById(couponId int64) (m *model.CouponGrant, err error) { + err = global.Db.Preload(clause.Associations).First(&m, couponId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetCouponGrantListPreloadByCouponId 获取数据-加载全部关联-id +func (r *CouponGrantDao) GetCouponGrantListPreloadByCouponId(couponId int64) (m []*model.CouponGrant, err error) { + err = global.Db.Preload(clause.Associations).Where("coupon_id = ?", couponId).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetCouponGrantByCouponId 获取数据-id +func (r *CouponGrantDao) GetCouponGrantByCouponId(couponId int64) (m *model.CouponGrant, err error) { + err = global.Db.Where("coupon_id = ?", couponId).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetCouponGrantList 获取列表 +func (r *CouponGrantDao) GetCouponGrantList(maps interface{}) (m []*model.CouponGrant, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddCouponGrant 新增 +func (r *CouponGrantDao) AddCouponGrant(tx *gorm.DB, model *model.CouponGrant) (*model.CouponGrant, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} diff --git a/api/dao/doctorConfigFollowPackage.go b/api/dao/doctorConfigFollowPackage.go new file mode 100644 index 0000000..654559b --- /dev/null +++ b/api/dao/doctorConfigFollowPackage.go @@ -0,0 +1,131 @@ +package dao + +import ( + "gorm.io/gorm" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" +) + +type DoctorConfigFollowPackageDao struct { +} + +// GetDoctorConfigFollowPackageListByDoctorId 获取列表-医生id +func (r *DoctorConfigFollowPackageDao) GetDoctorConfigFollowPackageListByDoctorId(doctorId int64) (m []*model.DoctorConfigFollowPackage, err error) { + err = global.Db.Where("doctor_id = ?", doctorId).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetDoctorConfigFollowPackageById 获取医生随访包配置数据-id +func (r *DoctorConfigFollowPackageDao) GetDoctorConfigFollowPackageById(followPackageId int64) (m *model.DoctorConfigFollowPackage, err error) { + err = global.Db.First(&m, followPackageId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteDoctorConfigFollowPackage 删除医生随访包配置 +func (r *DoctorConfigFollowPackageDao) DeleteDoctorConfigFollowPackage(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.DoctorConfigFollowPackage{}).Error + if err != nil { + return err + } + return nil +} + +// EditDoctorConfigFollowPackageById 修改医生随访包配置-随访包配置id +func (r *DoctorConfigFollowPackageDao) EditDoctorConfigFollowPackageById(tx *gorm.DB, followPackageId int64, data interface{}) error { + err := tx.Model(&model.DoctorConfigFollowPackage{}).Where("follow_package_id = ?", followPackageId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetDoctorConfigFollowPackageList 获取医生随访包配置列表 +func (r *DoctorConfigFollowPackageDao) GetDoctorConfigFollowPackageList(maps interface{}) (m []*model.DoctorConfigFollowPackage, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddDoctorConfigFollowPackage 新增医生随访包配置 +func (r *DoctorConfigFollowPackageDao) AddDoctorConfigFollowPackage(tx *gorm.DB, model *model.DoctorConfigFollowPackage) (*model.DoctorConfigFollowPackage, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// GetDoctorConfigFollowPackage 获取医生随访包配置 +func (r *DoctorConfigFollowPackageDao) GetDoctorConfigFollowPackage(maps interface{}) (m *model.DoctorConfigFollowPackage, err error) { + err = global.Db.Where(maps).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetDoctorFollowPageSearch 获取开启随访包服务的医生-分页 +func (r *DoctorConfigFollowPackageDao) GetDoctorFollowPageSearch(req requests.GetDoctorFollowPage, page, pageSize int) (m []*model.DoctorConfigFollowPackage, total int64, err error) { + var totalRecords int64 + + // 构建查询条件 + query := global.Db.Model(&model.DoctorConfigFollowPackage{}) + + // 医生 + query = query.Preload("UserDoctor", func(db *gorm.DB) *gorm.DB { + return db.Omit("open_id", "union_id", "wx_session_key") + }) + + // 明细 + query = query.Preload("DoctorConfigFollowPackageItem") + + // 用户表 + query = query.Preload("UserDoctor.User", func(db *gorm.DB) *gorm.DB { + return db.Omit("user_password", "salt") + }) + + // 手机号 + if req.Mobile != "" { + // 医生 + doctorUserSubQuery := global.Db.Model(&model.User{}). + Select("user_id"). + Where("mobile = ?", req.Mobile) + + doctorSubQuery := global.Db.Model(&model.UserDoctor{}). + Select("doctor_id"). + Where(gorm.Expr("user_id IN (?)", doctorUserSubQuery)) + + query = query.Where("doctor_id IN (?)", doctorSubQuery) + } + + // 医生姓名 + if req.DoctorName != "" { + subQuery := global.Db.Model(&model.UserDoctor{}). + Select("doctor_id"). + Where("user_name LIKE ?", "%"+req.DoctorName+"%") + + query = query.Where("doctor_id IN (?)", subQuery) + } + + // 排序 + query = query.Order("created_at desc") + + // 查询总数量 + if err := query.Count(&totalRecords).Error; err != nil { + return nil, 0, err + } + + err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error + if err != nil { + return nil, 0, err + } + return m, totalRecords, nil +} diff --git a/api/dao/doctorConfigFollowPackageItem.go b/api/dao/doctorConfigFollowPackageItem.go new file mode 100644 index 0000000..27416b3 --- /dev/null +++ b/api/dao/doctorConfigFollowPackageItem.go @@ -0,0 +1,54 @@ +package dao + +import ( + "gorm.io/gorm" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type DoctorConfigFollowPackageItemDao struct { +} + +// GetDoctorConfigFollowPackageItemListByFollowPackageId 获取列表-id +func (r *DoctorConfigFollowPackageItemDao) GetDoctorConfigFollowPackageItemListByFollowPackageId(followPackageId int64) (m []*model.DoctorConfigFollowPackageItem, err error) { + err = global.Db.Where("follow_package_id = ?", followPackageId).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteDoctorConfigFollowPackageItem 删除医生随访包列表配置 +func (r *DoctorConfigFollowPackageItemDao) DeleteDoctorConfigFollowPackageItem(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.DoctorConfigFollowPackageItem{}).Error + if err != nil { + return err + } + return nil +} + +// EditDoctorConfigFollowPackageItemById 修改医生随访包列表配置-随访包列表配置id +func (r *DoctorConfigFollowPackageItemDao) EditDoctorConfigFollowPackageItemById(tx *gorm.DB, followPackageItemId int64, data interface{}) error { + err := tx.Model(&model.DoctorConfigFollowPackageItem{}).Where("follow_package_item_id = ?", followPackageItemId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetDoctorConfigFollowPackageItemList 获取医生随访包列表配置列表 +func (r *DoctorConfigFollowPackageItemDao) GetDoctorConfigFollowPackageItemList(maps interface{}) (m []*model.DoctorConfigFollowPackageItem, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddDoctorConfigFollowPackageItem 新增医生随访包列表配置 +func (r *DoctorConfigFollowPackageItemDao) AddDoctorConfigFollowPackageItem(tx *gorm.DB, model *model.DoctorConfigFollowPackageItem) (*model.DoctorConfigFollowPackageItem, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} diff --git a/api/dao/doctorConfigHealthPackage.go b/api/dao/doctorConfigHealthPackage.go new file mode 100644 index 0000000..ab6fc4b --- /dev/null +++ b/api/dao/doctorConfigHealthPackage.go @@ -0,0 +1,134 @@ +package dao + +import ( + "gorm.io/gorm" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" +) + +type DoctorConfigHealthPackageDao struct { +} + +// GetDoctorConfigHealthPackageListByDoctorId 获取列表-医生id +func (r *DoctorConfigHealthPackageDao) GetDoctorConfigHealthPackageListByDoctorId(doctorId int64) (m []*model.DoctorConfigHealthPackage, err error) { + err = global.Db.Where("doctor_id = ?", doctorId).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetDoctorConfigHealthPackageById 获取医生健康包配置数据-问诊配置id +func (r *DoctorConfigHealthPackageDao) GetDoctorConfigHealthPackageById(healthPackageId int64) (m *model.DoctorConfigHealthPackage, err error) { + err = global.Db.First(&m, healthPackageId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteDoctorConfigHealthPackage 删除医生健康包配置 +func (r *DoctorConfigHealthPackageDao) DeleteDoctorConfigHealthPackage(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.DoctorConfigHealthPackage{}).Error + if err != nil { + return err + } + return nil +} + +// EditDoctorConfigHealthPackageById 修改医生健康包配置-健康包配置id +func (r *DoctorConfigHealthPackageDao) EditDoctorConfigHealthPackageById(tx *gorm.DB, healthPackageId int64, data interface{}) error { + err := tx.Model(&model.DoctorConfigHealthPackage{}).Where("health_package_id = ?", healthPackageId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetDoctorConfigHealthPackageList 获取医生健康包配置列表 +func (r *DoctorConfigHealthPackageDao) GetDoctorConfigHealthPackageList(maps interface{}) (m []*model.DoctorConfigHealthPackage, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddDoctorConfigHealthPackage 新增医生健康包配置 +func (r *DoctorConfigHealthPackageDao) AddDoctorConfigHealthPackage(tx *gorm.DB, model *model.DoctorConfigHealthPackage) (*model.DoctorConfigHealthPackage, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// GetDoctorConfigHealthPackage 获取医生健康包配置 +func (r *DoctorConfigHealthPackageDao) GetDoctorConfigHealthPackage(maps interface{}) (m *model.DoctorConfigHealthPackage, err error) { + err = global.Db.Where(maps).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetDoctorHealthPageSearch 获取开启健康包服务的医生-分页 +func (r *DoctorConfigHealthPackageDao) GetDoctorHealthPageSearch(req requests.GetDoctorHealthPage, page, pageSize int) (m []*model.DoctorConfigHealthPackage, total int64, err error) { + var totalRecords int64 + + // 构建查询条件 + query := global.Db.Model(&model.DoctorConfigHealthPackage{}) + + // 医生 + query = query.Preload("UserDoctor", func(db *gorm.DB) *gorm.DB { + return db.Omit("open_id", "union_id", "wx_session_key") + }) + + // 健康包表 + query = query.Preload("HealthPackage") + + // 用户表 + query = query.Preload("UserDoctor.User", func(db *gorm.DB) *gorm.DB { + return db.Omit("user_password", "salt") + }) + + // 医院表 + query = query.Preload("UserDoctor.Hospital") + + // 手机号 + if req.Mobile != "" { + // 医生 + doctorUserSubQuery := global.Db.Model(&model.User{}). + Select("user_id"). + Where("mobile = ?", req.Mobile) + + doctorSubQuery := global.Db.Model(&model.UserDoctor{}). + Select("doctor_id"). + Where(gorm.Expr("user_id IN (?)", doctorUserSubQuery)) + + query = query.Where("doctor_id IN (?)", doctorSubQuery) + } + + // 医生姓名 + if req.DoctorName != "" { + subQuery := global.Db.Model(&model.UserDoctor{}). + Select("doctor_id"). + Where("user_name LIKE ?", "%"+req.DoctorName+"%") + + query = query.Where("doctor_id IN (?)", subQuery) + } + + // 排序 + query = query.Order("created_at desc") + + // 查询总数量 + if err := query.Count(&totalRecords).Error; err != nil { + return nil, 0, err + } + + err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error + if err != nil { + return nil, 0, err + } + return m, totalRecords, nil +} diff --git a/api/dao/healthPackage.go b/api/dao/healthPackage.go new file mode 100644 index 0000000..81a5a7c --- /dev/null +++ b/api/dao/healthPackage.go @@ -0,0 +1,109 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" +) + +type HealthPackageDao struct { +} + +// GetHealthPackageById 获取数据-id +func (r *HealthPackageDao) GetHealthPackageById(packageId int64) (m *model.HealthPackage, err error) { + err = global.Db.First(&m, packageId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetHealthPackagePreloadById 获取数据-加载全部关联-id +func (r *HealthPackageDao) GetHealthPackagePreloadById(packageId int64) (m *model.HealthPackage, err error) { + err = global.Db.Preload(clause.Associations).First(&m, packageId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteHealthPackage 删除 +func (r *HealthPackageDao) DeleteHealthPackage(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.HealthPackage{}).Error + if err != nil { + return err + } + return nil +} + +// EditHealthPackage 修改 +func (r *HealthPackageDao) EditHealthPackage(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.HealthPackage{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetHealthPackageList 获取列表 +func (r *HealthPackageDao) GetHealthPackageList(maps interface{}) (m []*model.HealthPackage, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddHealthPackage 新增 +func (r *HealthPackageDao) AddHealthPackage(tx *gorm.DB, model *model.HealthPackage) (*model.HealthPackage, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// GetHealthPackagePageSearch 获取列表-分页 +func (r *HealthPackageDao) GetHealthPackagePageSearch(req requests.GetHealthPackagePage, page, pageSize int) (m []*model.HealthPackage, total int64, err error) { + var totalRecords int64 + + // 构建查询条件 + query := global.Db.Model(&model.HealthPackage{}) + + // 健康包-关联商品 + query = query.Preload("HealthPackageProduct") + + // 排序 + query = query.Order("created_at desc") + + // 查询总数量 + if err := query.Count(&totalRecords).Error; err != nil { + return nil, 0, err + } + + err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error + if err != nil { + return nil, 0, err + } + return m, totalRecords, nil +} + +// GetHealthPackageListSearch 获取健康包列表-限制条数 +func (r *HealthPackageDao) GetHealthPackageListSearch(req requests.GetHealthPackageList) (m []*model.HealthPackage, err error) { + // 构建查询条件 + query := global.Db.Model(&model.HealthPackage{}) + + // 健康包-关联商品 + query = query.Preload("HealthPackageProduct") + + // 排序 + query = query.Order("created_at desc") + + err = query.Limit(req.Limit).Find(&m).Error + if err != nil { + return nil, err + } + + return m, nil +} diff --git a/api/dao/healthPackageProduct.go b/api/dao/healthPackageProduct.go new file mode 100644 index 0000000..888cdf0 --- /dev/null +++ b/api/dao/healthPackageProduct.go @@ -0,0 +1,74 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type HealthPackageProductDao struct { +} + +// GetHealthPackageProductById 获取数据-id +func (r *HealthPackageProductDao) GetHealthPackageProductById(packageProductId int64) (m *model.HealthPackageProduct, err error) { + err = global.Db.First(&m, packageProductId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetHealthPackageProductPreloadById 获取数据-加载全部关联-id +func (r *HealthPackageProductDao) GetHealthPackageProductPreloadById(packageProductId int64) (m *model.HealthPackageProduct, err error) { + err = global.Db.Preload(clause.Associations).First(&m, packageProductId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetHealthPackageProductByPackageId 获取数据-id +func (r *HealthPackageProductDao) GetHealthPackageProductByPackageId(packageId int64) (m []*model.HealthPackageProduct, + err error) { + err = global.Db.Where("package_id = ?", packageId).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteHealthPackageProduct 删除 +func (r *HealthPackageProductDao) DeleteHealthPackageProduct(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.HealthPackageProduct{}).Error + if err != nil { + return err + } + return nil +} + +// EditHealthPackageProduct 修改 +func (r *HealthPackageProductDao) EditHealthPackageProduct(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.HealthPackageProduct{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetHealthPackageProductList 获取列表 +func (r *HealthPackageProductDao) GetHealthPackageProductList(maps interface{}) (m []*model.HealthPackageProduct, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddHealthPackageProduct 新增 +func (r *HealthPackageProductDao) AddHealthPackageProduct(tx *gorm.DB, model *model.HealthPackageProduct) (*model.HealthPackageProduct, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} diff --git a/api/dao/hospital.go b/api/dao/hospital.go index d10eb12..bfac701 100644 --- a/api/dao/hospital.go +++ b/api/dao/hospital.go @@ -7,11 +7,11 @@ import ( "hospital-admin-api/global" ) -type Hospital struct { +type HospitalDao struct { } // GetHospitalById 获取医院数据-医院id -func (r *Hospital) GetHospitalById(hospitalId int64) (m *model.Hospital, err error) { +func (r *HospitalDao) GetHospitalById(hospitalId int64) (m *model.Hospital, err error) { err = global.Db.First(&m, hospitalId).Error if err != nil { return nil, err @@ -20,7 +20,7 @@ func (r *Hospital) GetHospitalById(hospitalId int64) (m *model.Hospital, err err } // AddHospital 新增医院 -func (r *Hospital) AddHospital(tx *gorm.DB, model *model.Hospital) (*model.Hospital, error) { +func (r *HospitalDao) AddHospital(tx *gorm.DB, model *model.Hospital) (*model.Hospital, error) { if err := tx.Create(model).Error; err != nil { return nil, err } @@ -28,7 +28,7 @@ func (r *Hospital) AddHospital(tx *gorm.DB, model *model.Hospital) (*model.Hospi } // GetHospitalList 获取医院列表 -func (r *Hospital) GetHospitalList(maps interface{}) (m []*model.Hospital, err error) { +func (r *HospitalDao) GetHospitalList(maps interface{}) (m []*model.Hospital, err error) { err = global.Db.Where(maps).Find(&m).Error if err != nil { return nil, err @@ -37,7 +37,7 @@ func (r *Hospital) GetHospitalList(maps interface{}) (m []*model.Hospital, err e } // DeleteHospitalById 删除医院-医院id -func (r *Hospital) DeleteHospitalById(tx *gorm.DB, hospitalId int64) error { +func (r *HospitalDao) DeleteHospitalById(tx *gorm.DB, hospitalId int64) error { if err := tx.Delete(&model.Hospital{}, hospitalId).Error; err != nil { return err } @@ -45,7 +45,7 @@ func (r *Hospital) DeleteHospitalById(tx *gorm.DB, hospitalId int64) error { } // EditHospitalById 修改医院-医院id -func (r *Hospital) EditHospitalById(tx *gorm.DB, hospitalId int64, data interface{}) error { +func (r *HospitalDao) EditHospitalById(tx *gorm.DB, hospitalId int64, data interface{}) error { err := tx.Model(&model.Hospital{}).Where("hospital_id = ?", hospitalId).Updates(data).Error if err != nil { return err @@ -54,7 +54,7 @@ func (r *Hospital) EditHospitalById(tx *gorm.DB, hospitalId int64, data interfac } // GetHospitalLimitByMaps 获取医院列表-限制条数 -func (r *Hospital) GetHospitalLimitByMaps(hospitalRequest requests.GetHospitalLimit) (m []*model.Hospital, err error) { +func (r *HospitalDao) GetHospitalLimitByMaps(hospitalRequest requests.GetHospitalList) (m []*model.Hospital, err error) { result := global.Db if hospitalRequest.HospitalName != "" { result = result.Where("hospital_name like ?", "%"+hospitalRequest.HospitalName+"%") @@ -94,3 +94,46 @@ func (r *Hospital) GetHospitalLimitByMaps(hospitalRequest requests.GetHospitalLi } return m, nil } + +// GetHospitalPageSearch 获取医院列表-分页 +func (r *HospitalDao) GetHospitalPageSearch(req requests.GetHospitalPage, page, pageSize int) (m []*model.Hospital, total int64, err error) { + var totalRecords int64 + + // 构建查询条件 + query := global.Db.Model(&model.Hospital{}) + + if req.HospitalName != "" { + query = query.Where("hospital_name like ?", "%"+req.HospitalName+"%") + } + + if req.HospitalLevelName != "" { + query = query.Where("hospital_level_name like ?", "%"+req.HospitalLevelName+"%") + } + + if req.ProvinceId != 0 { + query = query.Where("province_id = ?", req.ProvinceId) + } + + if req.CityId != 0 { + query = query.Where("city_id = ?", req.CityId) + } + + if req.CountyId != 0 { + query = query.Where("county_id = ?", req.CountyId) + } + + // 排序 + query = query.Order("created_at desc") + + // 查询总数量 + if err := query.Count(&totalRecords).Error; err != nil { + return nil, 0, err + } + + err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error + if err != nil { + return nil, 0, err + } + + return m, totalRecords, nil +} diff --git a/api/dao/order.go b/api/dao/order.go new file mode 100644 index 0000000..41b4d97 --- /dev/null +++ b/api/dao/order.go @@ -0,0 +1,62 @@ +package dao + +import ( + "gorm.io/gorm" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type OrderDao struct { +} + +// GetOrderById 获取数据-id +func (r *OrderDao) GetOrderById(orderId int64) (m *model.Order, err error) { + err = global.Db.First(&m, orderId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddOrder 新增 +func (r *OrderDao) AddOrder(tx *gorm.DB, model *model.Order) (*model.Order, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// GetOrderList 获取列表 +func (r *OrderDao) GetOrderList(maps interface{}) (m []*model.Order, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrder 获取单个 +func (r *OrderDao) GetOrder(maps interface{}) (m *model.Order, err error) { + err = global.Db.Where(maps).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteOrderById 删除-id +func (r *OrderDao) DeleteOrderById(tx *gorm.DB, orderId int64) error { + if err := tx.Delete(&model.Order{}, orderId).Error; err != nil { + return err + } + return nil +} + +// EditOrderById 修改-id +func (r *OrderDao) EditOrderById(tx *gorm.DB, orderId int64, data interface{}) error { + err := tx.Model(&model.Order{}).Where("order_id = ?", orderId).Updates(data).Error + if err != nil { + return err + } + return nil +} diff --git a/api/dao/orderCoupon.go b/api/dao/orderCoupon.go new file mode 100644 index 0000000..acf7938 --- /dev/null +++ b/api/dao/orderCoupon.go @@ -0,0 +1,53 @@ +package dao + +import ( + "gorm.io/gorm" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type OrderCouponDao struct { +} + +// GetOrderCouponById 获取数据-接口id +func (r *OrderCouponDao) GetOrderCouponById(orderCouponId int64) (m *model.OrderCoupon, err error) { + err = global.Db.First(&m, orderCouponId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddOrderCoupon 新增 +func (r *OrderCouponDao) AddOrderCoupon(tx *gorm.DB, model *model.OrderCoupon) (*model.OrderCoupon, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// GetOrderCouponList 获取列表 +func (r *OrderCouponDao) GetOrderCouponList(maps interface{}) (m []*model.OrderCoupon, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteOrderCouponById 删除-id +func (r *OrderCouponDao) DeleteOrderCouponById(tx *gorm.DB, orderCouponId int64) error { + if err := tx.Delete(&model.OrderCoupon{}, orderCouponId).Error; err != nil { + return err + } + return nil +} + +// EditOrderCouponById 修改-id +func (r *OrderCouponDao) EditOrderCouponById(tx *gorm.DB, orderCouponId int64, data interface{}) error { + err := tx.Model(&model.OrderCoupon{}).Where("order_coupon_id = ?", orderCouponId).Updates(data).Error + if err != nil { + return err + } + return nil +} diff --git a/api/dao/orderInquiry.go b/api/dao/orderInquiry.go index 1508606..d243a0c 100644 --- a/api/dao/orderInquiry.go +++ b/api/dao/orderInquiry.go @@ -461,6 +461,15 @@ func (r *OrderInquiryDao) GetOrderInquiryTimeList(maps interface{}, startTime, e return m, nil } +// GetOrderInquiryCreatedTimeList 获取问诊订单列表-创建时间 +func (r *OrderInquiryDao) GetOrderInquiryCreatedTimeList(maps interface{}, startTime, endTime string) (m []*model.OrderInquiry, err error) { + err = global.Db.Where(maps).Where("created_at BETWEEN ? AND ?", startTime, endTime).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + // GetOrderInquiryForAccountPageSearch 获取账户关联问诊订单列表-分页 func (r *OrderInquiryDao) GetOrderInquiryForAccountPageSearch(req requests.GetOrderInquiryForAccountPage, page, pageSize int) (m []*model.OrderInquiry, total int64, err error) { var totalRecords int64 diff --git a/api/dao/orderPrescriptionFile.go b/api/dao/orderPrescriptionFile.go new file mode 100644 index 0000000..0f13d82 --- /dev/null +++ b/api/dao/orderPrescriptionFile.go @@ -0,0 +1,79 @@ +package dao + +import ( + "gorm.io/gorm" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type OrderPrescriptionFileDao struct { +} + +// GetOrderPrescriptionFileById 获取处方关联CA数据-处方关联CAid +func (r *OrderPrescriptionFileDao) GetOrderPrescriptionFileById(PrescriptionFileId int64) (m *model.OrderPrescriptionFile, err error) { + err = global.Db.First(&m, PrescriptionFileId).Error + if err != nil { + return nil, err + } + return m, nil +} + +func (r *OrderPrescriptionFileDao) GetOrderPrescriptionFileByOrderPrescriptionId(orderPrescriptionId int64) (m *model.OrderPrescriptionFile, err error) { + err = global.Db.Where("order_prescription_id = ?", orderPrescriptionId).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +func (r *OrderPrescriptionFileDao) GetOrderPrescriptionFileListByOrderPrescriptionId(orderPrescriptionId int64) (m []*model.OrderPrescriptionFile, err error) { + err = global.Db.Where("order_prescription_id = ?", orderPrescriptionId).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteOrderPrescriptionFile 删除处方关联CA +func (r *OrderPrescriptionFileDao) DeleteOrderPrescriptionFile(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.OrderPrescriptionFile{}).Error + if err != nil { + return err + } + return nil +} + +// EditOrderPrescriptionFile 修改处方关联CA +func (r *OrderPrescriptionFileDao) EditOrderPrescriptionFile(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.OrderPrescriptionFile{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditOrderPrescriptionFileById 修改处方关联CA +func (r *OrderPrescriptionFileDao) EditOrderPrescriptionFileById(tx *gorm.DB, PrescriptionFileId int64, data interface{}) error { + err := tx.Model(&model.OrderPrescriptionFile{}).Where("prescription_file_id = ?", PrescriptionFileId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetOrderPrescriptionFileList 获取处方关联CA列表 +func (r *OrderPrescriptionFileDao) GetOrderPrescriptionFileList(maps interface{}) (m []*model.OrderPrescriptionFile, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddOrderPrescriptionFile 新增处方关联CA +func (r *OrderPrescriptionFileDao) AddOrderPrescriptionFile(tx *gorm.DB, model *model.OrderPrescriptionFile) (*model.OrderPrescriptionFile, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} diff --git a/api/dao/orderProduct.go b/api/dao/orderProduct.go index a79f693..91aeb9c 100644 --- a/api/dao/orderProduct.go +++ b/api/dao/orderProduct.go @@ -92,6 +92,9 @@ func (r *OrderProductDao) GetOrderProductPageSearch(req requests.GetOrderProduct // 构建查询条件 query := global.Db.Model(&model.OrderProduct{}) + // 药品数据 + query = query.Preload("OrderProductItem") + // 医生 query = query.Preload("UserDoctor", func(db *gorm.DB) *gorm.DB { return db.Omit("open_id", "union_id", "wx_session_key") @@ -130,6 +133,29 @@ func (r *OrderProductDao) GetOrderProductPageSearch(req requests.GetOrderProduct query = query.Where(gorm.Expr("order_inquiry_id IN (?)", subQuery)) } + // 药品名称 + if req.ProductName != "" { + subQuery := global.Db.Model(&model.OrderProductItem{}). + Select("order_product_id"). + Where("product_name LIKE ?", "%"+req.ProductName+"%") + + query = query.Where(gorm.Expr("order_product_id IN (?)", subQuery)) + } + + // 药品通用名 + if req.CommonName != "" { + // 患者 + productSubQuery := global.Db.Model(&model.Product{}). + Select("product_id"). + Where("common_name LIKE ?", "%"+req.CommonName+"%") + + subQuery := global.Db.Model(&model.OrderProductItem{}). + Select("order_product_id"). + Where(gorm.Expr("product_id IN (?)", productSubQuery)) + + query = query.Where("order_product_id IN (?)", subQuery) + } + // 订单编号 if req.OrderProductNo != "" { query = query.Where("order_product_no = ?", req.OrderProductNo) diff --git a/api/dao/orderProductCoupon.go b/api/dao/orderProductCoupon.go new file mode 100644 index 0000000..9db0efb --- /dev/null +++ b/api/dao/orderProductCoupon.go @@ -0,0 +1,82 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type OrderProductCouponDao struct { +} + +// GetOrderProductCouponById 获取药品订单优惠卷数据-药品订单优惠卷id +func (r *OrderProductCouponDao) GetOrderProductCouponById(orderCouponId int64) (m *model.OrderProductCoupon, err error) { + err = global.Db.First(&m, orderCouponId).Error + if err != nil { + return nil, err + } + return m, nil +} + +func (r *OrderProductCouponDao) GetOrderProductCouponByOrderProductId(orderProductId int64) (m *model. + OrderProductCoupon, err error) { + err = global.Db.Where("order_product_id = ?", orderProductId).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderProductCouponPreloadById 获取药品订单优惠卷数据-加载全部关联-药品订单优惠卷id +func (r *OrderProductCouponDao) GetOrderProductCouponPreloadById(orderCouponId int64) (m *model.OrderProductCoupon, err error) { + err = global.Db.Preload(clause.Associations).First(&m, orderCouponId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteOrderProductCoupon 删除药品订单优惠卷 +func (r *OrderProductCouponDao) DeleteOrderProductCoupon(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.OrderProductCoupon{}).Error + if err != nil { + return err + } + return nil +} + +// EditOrderProductCoupon 修改药品订单优惠卷 +func (r *OrderProductCouponDao) EditOrderProductCoupon(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.OrderProductCoupon{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditOrderProductCouponById 修改药品订单优惠卷-药品订单优惠卷id +func (r *OrderProductCouponDao) EditOrderProductCouponById(tx *gorm.DB, orderCouponId int64, data interface{}) error { + err := tx.Model(&model.OrderProductCoupon{}).Where("order_coupon_id = ?", orderCouponId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetOrderProductCouponList 获取药品订单优惠卷列表 +func (r *OrderProductCouponDao) GetOrderProductCouponList(maps interface{}) (m []*model.OrderProductCoupon, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddOrderProductCoupon 新增药品订单优惠卷 +func (r *OrderProductCouponDao) AddOrderProductCoupon(tx *gorm.DB, model *model.OrderProductCoupon) (*model.OrderProductCoupon, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} diff --git a/api/dao/orderRefund.go b/api/dao/orderRefund.go new file mode 100644 index 0000000..fd2139d --- /dev/null +++ b/api/dao/orderRefund.go @@ -0,0 +1,53 @@ +package dao + +import ( + "gorm.io/gorm" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type OrderRefundDao struct { +} + +// GetOrderRefundById 获取接口数据-接口id +func (r *OrderRefundDao) GetOrderRefundById(orderRefundId int64) (m *model.OrderRefund, err error) { + err = global.Db.First(&m, orderRefundId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddOrderRefund 新增接口 +func (r *OrderRefundDao) AddOrderRefund(tx *gorm.DB, model *model.OrderRefund) (*model.OrderRefund, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// GetOrderRefundList 获取接口列表 +func (r *OrderRefundDao) GetOrderRefundList(maps interface{}) (m []*model.OrderRefund, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteOrderRefundById 删除接口-接口id +func (r *OrderRefundDao) DeleteOrderRefundById(tx *gorm.DB, orderRefundId int64) error { + if err := tx.Delete(&model.OrderRefund{}, orderRefundId).Error; err != nil { + return err + } + return nil +} + +// EditOrderRefundById 修改接口-接口id +func (r *OrderRefundDao) EditOrderRefundById(tx *gorm.DB, orderRefundId int64, data interface{}) error { + err := tx.Model(&model.OrderRefund{}).Where("order_refund_id = ?", orderRefundId).Updates(data).Error + if err != nil { + return err + } + return nil +} diff --git a/api/dao/orderServicePackage.go b/api/dao/orderServicePackage.go new file mode 100644 index 0000000..9d4ec53 --- /dev/null +++ b/api/dao/orderServicePackage.go @@ -0,0 +1,517 @@ +package dao + +import ( + "errors" + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" + "strings" + "time" +) + +type OrderServicePackageDao struct { +} + +// GetOrderServicePackageById 获取数据-id +func (r *OrderServicePackageDao) GetOrderServicePackageById(orderServiceId int64) (m *model.OrderServicePackage, err error) { + err = global.Db.First(&m, orderServiceId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackagePreloadById 获取数据-加载全部关联-id +func (r *OrderServicePackageDao) GetOrderServicePackagePreloadById(orderServiceId int64) (m *model.OrderServicePackage, err error) { + err = global.Db.Preload(clause.Associations).First(&m, orderServiceId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageByOrderId 获取数据-订单id +func (r *OrderServicePackageDao) GetOrderServicePackageByOrderId(orderId int64) (m *model.OrderServicePackage, err error) { + err = global.Db.Where("order_id = ?", orderId).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteOrderServicePackage 删除 +func (r *OrderServicePackageDao) DeleteOrderServicePackage(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.OrderServicePackage{}).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackage 修改 +func (r *OrderServicePackageDao) EditOrderServicePackage(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.OrderServicePackage{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageById 修改-药品订单id +func (r *OrderServicePackageDao) EditOrderServicePackageById(tx *gorm.DB, orderId int64, data interface{}) error { + err := tx.Model(&model.OrderServicePackage{}).Where("order_id = ?", orderId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetOrderServicePackageList 获取列表 +func (r *OrderServicePackageDao) GetOrderServicePackageList(maps interface{}) (m []*model.OrderServicePackage, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackage 获取 +func (r *OrderServicePackageDao) GetOrderServicePackage(maps interface{}) (m *model.OrderServicePackage, err error) { + err = global.Db.Where(maps).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddOrderServicePackage 新增 +func (r *OrderServicePackageDao) AddOrderServicePackage(tx *gorm.DB, model *model.OrderServicePackage) (*model.OrderServicePackage, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// GetOrderServicePackagePageSearch 获取问诊订单列表-分页 +func (r *OrderServicePackageDao) GetOrderServicePackagePageSearch(req requests.GetOrderServicePackagePage, page, pageSize int) (m []*model.OrderServicePackage, total int64, err error) { + var totalRecords int64 + + // 构建查询条件 + query := global.Db.Model(&model.OrderServicePackage{}) + + // 医生 + query = query.Preload("UserDoctor", func(db *gorm.DB) *gorm.DB { + return db.Omit("open_id", "union_id", "wx_session_key") + }) + + // 医生姓名 + if req.DoctorName != "" { + subQuery := global.Db.Model(&model.UserDoctor{}). + Select("doctor_id"). + Where("user_name LIKE ?", "%"+req.DoctorName+"%") + + query = query.Where(gorm.Expr("doctor_id IN (?)", subQuery)) + } + + // 用户 + query = query.Preload("User", func(db *gorm.DB) *gorm.DB { + return db.Select("user_id", "user_name", "mobile") + }) + + // 主键id + if req.OrderServiceId != "" { + query = query.Where("order_service_id = ?", req.OrderServiceId) + } + + // 订单id + if req.OrderId != "" { + query = query.Where("order_id = ?", req.OrderId) + } + + // 服务包类型 + if req.OrderServiceType != nil { + query = query.Where("order_service_type = ?", req.OrderServiceType) + } + + // 订单状态 + if req.OrderServiceStatus != nil { + query = query.Where("order_service_status = ?", req.OrderServiceStatus) + } + + // 删除状态 + if req.OrderServiceStatus != nil { + query = query.Where("order_service_status = ?", req.OrderServiceStatus) + } + + // 订单退款状态 + if req.RefundStatus != nil { + query = query.Where("refund_status = ?", req.RefundStatus) + } + + // 支付渠道 + if req.PayChannel != nil { + query = query.Where("pay_channel = ?", req.PayChannel) + } + + // 支付状态 + if req.PayStatus != nil { + query = query.Where("pay_status = ?", req.PayStatus) + } + + // 系统订单编号 + if req.OrderServiceNo != "" { + query = query.Where("order_service_no = ?", req.OrderServiceNo) + } + + // 第三方支付流水号 + if req.EscrowTradeNo != "" { + query = query.Where("escrow_trade_no = ?", req.EscrowTradeNo) + } + + // 支付时间 + if req.PayTime != "" { + payTime := strings.Split(req.PayTime, "&") + if len(payTime) == 2 { + startTime, _ := time.Parse("2006-01-02", payTime[0]) + endTime, _ := time.Parse("2006-01-02", payTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("pay_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 开始服务时间 + if req.StartTime != "" { + orderStartTime := strings.Split(req.StartTime, "&") + if len(orderStartTime) == 2 { + startTime, _ := time.Parse("2006-01-02", orderStartTime[0]) + endTime, _ := time.Parse("2006-01-02", orderStartTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("start_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 结束服务时间 + if req.FinishTime != "" { + finishTime := strings.Split(req.FinishTime, "&") + if len(finishTime) == 2 { + startTime, _ := time.Parse("2006-01-02", finishTime[0]) + endTime, _ := time.Parse("2006-01-02", finishTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("finish_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 订单取消时间 + if req.CancelTime != "" { + cancelTime := strings.Split(req.CancelTime, "&") + if len(cancelTime) == 2 { + startTime, _ := time.Parse("2006-01-02", cancelTime[0]) + endTime, _ := time.Parse("2006-01-02", cancelTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("cancel_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 取消订单原因 + if req.CancelReason != nil { + query = query.Where("cancel_reason = ?", req.CancelReason) + } + + // 取消订单备注 + if req.CancelRemarks != "" { + query = query.Where("cancel_remarks LIKE ?", "%"+req.CancelRemarks+"%") + } + + // 添加完成订单延迟队列状态 + if req.AddFinishStatus != nil { + query = query.Where("add_finish_status = ?", req.AddFinishStatus) + } + + // 添加完成订单延迟队列时间 + if req.AddFinishTime != "" { + addFinishTime := strings.Split(req.AddFinishTime, "&") + if len(addFinishTime) == 2 { + startTime, _ := time.Parse("2006-01-02", addFinishTime[0]) + endTime, _ := time.Parse("2006-01-02", addFinishTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("add_finish_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 创建时间 + if req.CreatedAt != "" { + createdAt := strings.Split(req.CreatedAt, "&") + if len(createdAt) == 2 { + startTime, _ := time.Parse("2006-01-02", createdAt[0]) + endTime, _ := time.Parse("2006-01-02", createdAt[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("created_at BETWEEN ? AND ?", startTime, endTime) + } + } + + // 患者姓名-就诊人 + if req.PatientName != "" { + query = query.Where("patient_name LIKE ?", "%"+req.PatientName+"%") + } + + // 手机号-医生/患者 + if req.Mobile != "" { + // 患者 + patientSubQuery := global.Db.Model(&model.User{}). + Select("user_id"). + Where("mobile = ?", req.Mobile) + + // 医生 + doctorUserSubQuery := global.Db.Model(&model.User{}). + Select("user_id"). + Where("mobile = ?", req.Mobile) + + doctorSubQuery := global.Db.Model(&model.UserDoctor{}). + Select("doctor_id"). + Where(gorm.Expr("user_id IN (?)", doctorUserSubQuery)) + + query = query.Where("user_id IN (?)", patientSubQuery).Or("doctor_id IN (?)", doctorSubQuery) + } + + // 排序 + query = query.Order("created_at desc") + + // 查询总数量 + if err := query.Count(&totalRecords).Error; err != nil { + return nil, 0, err + } + + err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error + if err != nil { + return nil, 0, err + } + return m, totalRecords, nil +} + +// GetOrderServicePackageExportListSearch 获取服务包订单列表-导出 +func (r *OrderServicePackageDao) GetOrderServicePackageExportListSearch(req requests.OrderServicePackageExportList) (m []*model.OrderServicePackage, err error) { + // 构建查询条件 + query := global.Db.Model(&model.OrderServicePackage{}) + + // 医生 + query = query.Preload("UserDoctor", func(db *gorm.DB) *gorm.DB { + return db.Omit("open_id", "union_id", "wx_session_key") + }) + + // 用户 + query = query.Preload("User", func(db *gorm.DB) *gorm.DB { + return db.Select("user_id", "user_name", "mobile") + }) + + // 患者 + query = query.Preload("UserPatient.User", func(db *gorm.DB) *gorm.DB { + return db.Select("user_id", "user_name", "mobile") + }) + + // 当前搜索数据 + if req.Type == 1 { + // 医生姓名 + if req.DoctorName != "" { + subQuery := global.Db.Model(&model.UserDoctor{}). + Select("doctor_id"). + Where("user_name LIKE ?", "%"+req.DoctorName+"%") + + query = query.Where(gorm.Expr("doctor_id IN (?)", subQuery)) + } + + // 订单id + if req.OrderId != "" { + query = query.Where("order_id = ?", req.OrderId) + } + + // 服务包类型 + if req.OrderServiceType != nil { + query = query.Where("order_service_type = ?", req.OrderServiceType) + } + + // 订单状态 + if req.OrderServiceStatus != nil { + query = query.Where("order_service_status = ?", req.OrderServiceStatus) + } + + // 删除状态 + if req.OrderServiceStatus != nil { + query = query.Where("order_service_status = ?", req.OrderServiceStatus) + } + + // 订单退款状态 + if req.RefundStatus != nil { + query = query.Where("refund_status = ?", req.RefundStatus) + } + + // 支付渠道 + if req.PayChannel != nil { + query = query.Where("pay_channel = ?", req.PayChannel) + } + + // 支付状态 + if req.PayStatus != nil { + query = query.Where("pay_status = ?", req.PayStatus) + } + + // 系统订单编号 + if req.OrderServiceNo != "" { + query = query.Where("order_service_no = ?", req.OrderServiceNo) + } + + // 第三方支付流水号 + if req.EscrowTradeNo != "" { + query = query.Where("escrow_trade_no = ?", req.EscrowTradeNo) + } + + // 支付时间 + if req.PayTime != "" { + payTime := strings.Split(req.PayTime, "&") + if len(payTime) == 2 { + startTime, _ := time.Parse("2006-01-02", payTime[0]) + endTime, _ := time.Parse("2006-01-02", payTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("pay_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 开始服务时间 + if req.StartTime != "" { + orderStartTime := strings.Split(req.StartTime, "&") + if len(orderStartTime) == 2 { + startTime, _ := time.Parse("2006-01-02", orderStartTime[0]) + endTime, _ := time.Parse("2006-01-02", orderStartTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("start_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 结束服务时间 + if req.FinishTime != "" { + finishTime := strings.Split(req.FinishTime, "&") + if len(finishTime) == 2 { + startTime, _ := time.Parse("2006-01-02", finishTime[0]) + endTime, _ := time.Parse("2006-01-02", finishTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("finish_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 订单取消时间 + if req.CancelTime != "" { + cancelTime := strings.Split(req.CancelTime, "&") + if len(cancelTime) == 2 { + startTime, _ := time.Parse("2006-01-02", cancelTime[0]) + endTime, _ := time.Parse("2006-01-02", cancelTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("cancel_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 取消订单原因 + if req.CancelReason != nil { + query = query.Where("cancel_reason = ?", req.CancelReason) + } + + // 取消订单备注 + if req.CancelRemarks != "" { + query = query.Where("cancel_remarks LIKE ?", "%"+req.CancelRemarks+"%") + } + + // 添加完成订单延迟队列状态 + if req.AddFinishStatus != nil { + query = query.Where("add_finish_status = ?", req.AddFinishStatus) + } + + // 添加完成订单延迟队列时间 + if req.AddFinishTime != "" { + addFinishTime := strings.Split(req.AddFinishTime, "&") + if len(addFinishTime) == 2 { + startTime, _ := time.Parse("2006-01-02", addFinishTime[0]) + endTime, _ := time.Parse("2006-01-02", addFinishTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("add_finish_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 创建时间 + if req.CreatedAt != "" { + createdAt := strings.Split(req.CreatedAt, "&") + if len(createdAt) == 2 { + startTime, _ := time.Parse("2006-01-02", createdAt[0]) + endTime, _ := time.Parse("2006-01-02", createdAt[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("created_at BETWEEN ? AND ?", startTime, endTime) + } + } + + // 患者姓名-就诊人 + if req.PatientName != "" { + query = query.Where("patient_name LIKE ?", "%"+req.PatientName+"%") + } + + // 手机号-医生/患者 + if req.Mobile != "" { + // 患者 + patientSubQuery := global.Db.Model(&model.User{}). + Select("user_id"). + Where("mobile = ?", req.Mobile) + + // 医生 + doctorUserSubQuery := global.Db.Model(&model.User{}). + Select("user_id"). + Where("mobile = ?", req.Mobile) + + doctorSubQuery := global.Db.Model(&model.UserDoctor{}). + Select("doctor_id"). + Where(gorm.Expr("user_id IN (?)", doctorUserSubQuery)) + + query = query.Where("user_id IN (?)", patientSubQuery).Or("doctor_id IN (?)", doctorSubQuery) + } + } + + // 当前选中数据 + if req.Type == 2 { + if req.Id == "" { + return nil, errors.New("未提供需导出数据编号") + } + + id := strings.Split(req.Id, ",") + query = query.Where("order_service_id IN (?)", id) + } + + // 排序 + query = query.Order("created_at desc") + + err = query.Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/dao/orderServicePackageCase.go b/api/dao/orderServicePackageCase.go new file mode 100644 index 0000000..1ddf5e5 --- /dev/null +++ b/api/dao/orderServicePackageCase.go @@ -0,0 +1,100 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type OrderServicePackageCaseDao struct { +} + +// GetOrderServicePackageCaseById 获取数据-id +func (r *OrderServicePackageCaseDao) GetOrderServicePackageCaseById(orderServiceCaseId int64) (m *model.OrderServicePackageCase, err error) { + err = global.Db.First(&m, orderServiceCaseId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageCasePreloadById 获取数据-加载全部关联-id +func (r *OrderServicePackageCaseDao) GetOrderServicePackageCasePreloadById(orderServiceCaseId int64) (m *model.OrderServicePackageCase, err error) { + err = global.Db.Preload(clause.Associations).First(&m, orderServiceCaseId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageCaseByOrderId 获取数据-订单id +func (r *OrderServicePackageCaseDao) GetOrderServicePackageCaseByOrderId(orderId int64) (m *model.OrderServicePackageCase, err error) { + err = global.Db.Where("order_id = ?", orderId).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageCaseByOrderServicePackageId 获取数据-订单id +func (r *OrderServicePackageCaseDao) GetOrderServicePackageCaseByOrderServicePackageId(orderServicePackageId int64) (m *model.OrderServicePackageCase, err error) { + err = global.Db.Where("order_service_id = ?", orderServicePackageId).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteOrderServicePackageCase 删除 +func (r *OrderServicePackageCaseDao) DeleteOrderServicePackageCase(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.OrderServicePackageCase{}).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageCase 修改 +func (r *OrderServicePackageCaseDao) EditOrderServicePackageCase(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.OrderServicePackageCase{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageCaseByOrderServicePackageId 修改-id +func (r *OrderServicePackageCaseDao) EditOrderServicePackageCaseByOrderServicePackageId(tx *gorm.DB, orderServicePackageId int64, data interface{}) error { + err := tx.Model(&model.OrderServicePackageCase{}).Where("order_service_id = ?", orderServicePackageId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageCaseById 修改-药品订单id +func (r *OrderServicePackageCaseDao) EditOrderServicePackageCaseById(tx *gorm.DB, orderId int64, data interface{}) error { + err := tx.Model(&model.OrderServicePackageCase{}).Where("order_id = ?", orderId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetOrderServicePackageCaseList 获取列表 +func (r *OrderServicePackageCaseDao) GetOrderServicePackageCaseList(maps interface{}) (m []*model.OrderServicePackageCase, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddOrderServicePackageCase 新增 +func (r *OrderServicePackageCaseDao) AddOrderServicePackageCase(tx *gorm.DB, model *model.OrderServicePackageCase) (*model.OrderServicePackageCase, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} diff --git a/api/dao/orderServicePackageDetail.go b/api/dao/orderServicePackageDetail.go new file mode 100644 index 0000000..3ffe3f2 --- /dev/null +++ b/api/dao/orderServicePackageDetail.go @@ -0,0 +1,100 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type OrderServicePackageDetailDao struct { +} + +// GetOrderServicePackageDetailById 获取数据-id +func (r *OrderServicePackageDetailDao) GetOrderServicePackageDetailById(orderServiceDetailId int64) (m *model.OrderServicePackageDetail, err error) { + err = global.Db.First(&m, orderServiceDetailId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageDetailPreloadById 获取数据-加载全部关联-id +func (r *OrderServicePackageDetailDao) GetOrderServicePackageDetailPreloadById(orderServiceDetailId int64) (m *model.OrderServicePackageDetail, err error) { + err = global.Db.Preload(clause.Associations).First(&m, orderServiceDetailId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageDetailByOrderId 获取数据-订单id +func (r *OrderServicePackageDetailDao) GetOrderServicePackageDetailByOrderId(orderId int64) (m *model.OrderServicePackageDetail, err error) { + err = global.Db.Where("order_id = ?", orderId).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageDetailByOrderServicePackageId 获取数据-订单id +func (r *OrderServicePackageDetailDao) GetOrderServicePackageDetailByOrderServicePackageId(orderServicePackageId int64) (m *model.OrderServicePackageDetail, err error) { + err = global.Db.Where("order_service_id = ?", orderServicePackageId).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteOrderServicePackageDetail 删除 +func (r *OrderServicePackageDetailDao) DeleteOrderServicePackageDetail(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.OrderServicePackageDetail{}).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageDetail 修改 +func (r *OrderServicePackageDetailDao) EditOrderServicePackageDetail(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.OrderServicePackageDetail{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageDetailByOrderServicePackageId 修改-id +func (r *OrderServicePackageDetailDao) EditOrderServicePackageDetailByOrderServicePackageId(tx *gorm.DB, orderServicePackageId int64, data interface{}) error { + err := tx.Model(&model.OrderServicePackageDetail{}).Where("order_service_id = ?", orderServicePackageId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageDetailById 修改-药品订单id +func (r *OrderServicePackageDetailDao) EditOrderServicePackageDetailById(tx *gorm.DB, orderId int64, data interface{}) error { + err := tx.Model(&model.OrderServicePackageDetail{}).Where("order_id = ?", orderId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetOrderServicePackageDetailList 获取列表 +func (r *OrderServicePackageDetailDao) GetOrderServicePackageDetailList(maps interface{}) (m []*model.OrderServicePackageDetail, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddOrderServicePackageDetail 新增 +func (r *OrderServicePackageDetailDao) AddOrderServicePackageDetail(tx *gorm.DB, model *model.OrderServicePackageDetail) (*model.OrderServicePackageDetail, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} diff --git a/api/dao/orderServicePackageInquiry.go b/api/dao/orderServicePackageInquiry.go new file mode 100644 index 0000000..ad58e01 --- /dev/null +++ b/api/dao/orderServicePackageInquiry.go @@ -0,0 +1,74 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type OrderServicePackageInquiryDao struct { +} + +// GetOrderServicePackageInquiryById 获取数据-id +func (r *OrderServicePackageInquiryDao) GetOrderServicePackageInquiryById(serviceProductId int64) (m *model.OrderServicePackageInquiry, err error) { + err = global.Db.First(&m, serviceProductId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageInquiryPreloadById 获取数据-加载全部关联-id +func (r *OrderServicePackageInquiryDao) GetOrderServicePackageInquiryPreloadById(serviceProductId int64) (m *model.OrderServicePackageInquiry, err error) { + err = global.Db.Preload(clause.Associations).First(&m, serviceProductId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageInquiryByOrderNo 获取数据-系统订单编号 +func (r *OrderServicePackageInquiryDao) GetOrderServicePackageInquiryByOrderNo(orderNo string) (m []*model.OrderServicePackageInquiry, err error) { + err = global.Db.Where("order_service_no = ?", orderNo).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageInquiryPreloadByOrderNo 获取数据-系统订单编号 +func (r *OrderServicePackageInquiryDao) GetOrderServicePackageInquiryPreloadByOrderNo(orderNo string) (m []*model.OrderServicePackageInquiry, err error) { + err = global.Db.Preload(clause.Associations).Where("order_service_no = ?", orderNo).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteOrderServicePackageInquiry 删除 +func (r *OrderServicePackageInquiryDao) DeleteOrderServicePackageInquiry(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.OrderServicePackageInquiry{}).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageInquiry 修改 +func (r *OrderServicePackageInquiryDao) EditOrderServicePackageInquiry(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.OrderServicePackageInquiry{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetOrderServicePackageInquiryList 获取列表 +func (r *OrderServicePackageInquiryDao) GetOrderServicePackageInquiryList(maps interface{}) (m []*model.OrderServicePackageInquiry, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/dao/orderServicePackageProduct.go b/api/dao/orderServicePackageProduct.go new file mode 100644 index 0000000..4fef133 --- /dev/null +++ b/api/dao/orderServicePackageProduct.go @@ -0,0 +1,74 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type OrderServicePackageProductDao struct { +} + +// GetOrderServicePackageProductById 获取数据-id +func (r *OrderServicePackageProductDao) GetOrderServicePackageProductById(serviceProductId int64) (m *model.OrderServicePackageProduct, err error) { + err = global.Db.First(&m, serviceProductId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageProductPreloadById 获取数据-加载全部关联-id +func (r *OrderServicePackageProductDao) GetOrderServicePackageProductPreloadById(serviceProductId int64) (m *model.OrderServicePackageProduct, err error) { + err = global.Db.Preload(clause.Associations).First(&m, serviceProductId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageProductPreloadByOrderServiceId 获取数据 +func (r *OrderServicePackageProductDao) GetOrderServicePackageProductPreloadByOrderServiceId(orderServiceId int64) (m []*model.OrderServicePackageProduct, err error) { + err = global.Db.Preload(clause.Associations).Where("order_service_id = ?", orderServiceId).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// EditOrderServicePackageProduct 修改 +func (r *OrderServicePackageProductDao) EditOrderServicePackageProduct(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.OrderServicePackageProduct{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageProductById 修改 +func (r *OrderServicePackageProductDao) EditOrderServicePackageProductById(tx *gorm.DB, serviceProductId int64, data interface{}) error { + err := tx.Model(&model.OrderServicePackageProduct{}).Where("service_product_id = ?", serviceProductId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetOrderServicePackageProductList 获取列表 +func (r *OrderServicePackageProductDao) GetOrderServicePackageProductList(maps interface{}) (m []*model.OrderServicePackageProduct, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageProduct 获取 +func (r *OrderServicePackageProductDao) GetOrderServicePackageProduct(maps interface{}) (m *model.OrderServicePackageProduct, err error) { + err = global.Db.Where(maps).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/dao/orderServicePackageRefund.go b/api/dao/orderServicePackageRefund.go new file mode 100644 index 0000000..bb26d2b --- /dev/null +++ b/api/dao/orderServicePackageRefund.go @@ -0,0 +1,100 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type OrderServicePackageRefundDao struct { +} + +// GetOrderServicePackageRefundById 获取数据-id +func (r *OrderServicePackageRefundDao) GetOrderServicePackageRefundById(serviceRefundId int64) (m *model.OrderServicePackageRefund, err error) { + err = global.Db.First(&m, serviceRefundId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageRefundPreloadById 获取数据-加载全部关联-id +func (r *OrderServicePackageRefundDao) GetOrderServicePackageRefundPreloadById(serviceRefundId int64) (m *model.OrderServicePackageRefund, err error) { + err = global.Db.Preload(clause.Associations).First(&m, serviceRefundId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageRefundByOrderServicePackageId 获取数据-服务包订单id +func (r *OrderServicePackageRefundDao) GetOrderServicePackageRefundByOrderServicePackageId(orderServicePackageId int64) (m *model.OrderServicePackageRefund, err error) { + err = global.Db.Where("order_service_id = ?", orderServicePackageId).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderServicePackageRefundByOrderNo 获取数据-系统订单id +func (r *OrderServicePackageRefundDao) GetOrderServicePackageRefundByOrderNo(orderNo int64) (m *model.OrderServicePackageRefund, err error) { + err = global.Db.Where("order_service_no = ?", orderNo).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteOrderServicePackageRefund 删除 +func (r *OrderServicePackageRefundDao) DeleteOrderServicePackageRefund(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.OrderServicePackageRefund{}).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageRefund 修改 +func (r *OrderServicePackageRefundDao) EditOrderServicePackageRefund(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.OrderServicePackageRefund{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageRefundByOrderServicePackageId 修改-id +func (r *OrderServicePackageRefundDao) EditOrderServicePackageRefundByOrderServicePackageId(tx *gorm.DB, orderServicePackageId int64, data interface{}) error { + err := tx.Model(&model.OrderServicePackageRefund{}).Where("order_service_id = ?", orderServicePackageId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditOrderServicePackageRefundById 修改-药品订单id +func (r *OrderServicePackageRefundDao) EditOrderServicePackageRefundById(tx *gorm.DB, orderNo string, data interface{}) error { + err := tx.Model(&model.OrderServicePackageRefund{}).Where("order_service_no = ?", orderNo).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetOrderServicePackageRefundList 获取列表 +func (r *OrderServicePackageRefundDao) GetOrderServicePackageRefundList(maps interface{}) (m []*model.OrderServicePackageRefund, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddOrderServicePackageRefund 新增 +func (r *OrderServicePackageRefundDao) AddOrderServicePackageRefund(tx *gorm.DB, model *model.OrderServicePackageRefund) (*model.OrderServicePackageRefund, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} diff --git a/api/dao/popup.go b/api/dao/popup.go new file mode 100644 index 0000000..8105188 --- /dev/null +++ b/api/dao/popup.go @@ -0,0 +1,64 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type PopupDao struct { +} + +// GetPopupById 获取数据-id +func (r *PopupDao) GetPopupById(popupId int64) (m *model.Popup, err error) { + err = global.Db.First(&m, popupId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetPopupPreloadById 获取数据-加载全部关联-id +func (r *PopupDao) GetPopupPreloadById(popupId int64) (m *model.Popup, err error) { + err = global.Db.Preload(clause.Associations).First(&m, popupId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// EditPopup 修改 +func (r *PopupDao) EditPopup(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.Popup{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditPopupByOrderServicePackageId 修改-id +func (r *PopupDao) EditPopupByOrderServicePackageId(tx *gorm.DB, popupId int64, data interface{}) error { + err := tx.Model(&model.Popup{}).Where("popup_id = ?", popupId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetPopupList 获取列表 +func (r *PopupDao) GetPopupList(maps interface{}) (m []*model.Popup, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddPopup 新增 +func (r *PopupDao) AddPopup(tx *gorm.DB, model *model.Popup) (*model.Popup, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} diff --git a/api/dao/product.go b/api/dao/product.go index f0523ac..2568d3a 100644 --- a/api/dao/product.go +++ b/api/dao/product.go @@ -1,11 +1,13 @@ package dao import ( + "errors" "gorm.io/gorm" "gorm.io/gorm/clause" "hospital-admin-api/api/model" "hospital-admin-api/api/requests" "hospital-admin-api/global" + "strings" ) type ProductDao struct { @@ -105,6 +107,11 @@ func (r *ProductDao) GetProductPageSearch(req requests.GetProductPage, page, pag query = query.Where("product_type = ?", req.ProductType) } + // 是否麻精药品 + if req.IsMajing != nil { + query = query.Where("is_majing = ?", req.IsMajing) + } + // 商品状态 if req.ProductStatus != nil { query = query.Where("product_status = ?", req.ProductStatus) @@ -141,7 +148,15 @@ func (r *ProductDao) GetProductPageSearch(req requests.GetProductPage, page, pag } // 排序 - query = query.Order("created_at desc") + if req.Order != nil { + if req.Order.Stock != "" { + query = query.Joins("JOIN gdxz_product_platform_amount ON gdxz_product_platform_amount.product_platform_id = gdxz_product.product_platform_id"). + Order("gdxz_product_platform_amount.stock " + req.Order.Stock) + } + + } + + query = query.Order("gdxz_product.created_at desc") // 查询总数量 if err := query.Count(&totalRecords).Error; err != nil { @@ -154,3 +169,177 @@ func (r *ProductDao) GetProductPageSearch(req requests.GetProductPage, page, pag } return m, totalRecords, nil } + +// GetProductExportListSearch 获取商品列表-导出 +func (r *ProductDao) GetProductExportListSearch(req requests.ProductExportList) (m []*model.Product, err error) { + // 构建查询条件 + query := global.Db.Model(&model.Product{}) + + // 库存表 + query = query.Preload("ProductPlatformAmount", func(db *gorm.DB) *gorm.DB { + return db.Select("amount_id", "product_platform_id", "product_platform_code", "stock") + }) + + // 当前搜索数据 + if req.Type == 1 { + // 商品名称 + if req.ProductName != "" { + query = query.Where("product_name LIKE ?", "%"+req.ProductName+"%") + } + + // 商品通用名 + if req.CommonName != "" { + query = query.Where("common_name LIKE ?", "%"+req.CommonName+"%") + } + + // 商品助记码 + if req.MnemonicCode != "" { + query = query.Where("mnemonic_code LIKE ?", "%"+req.MnemonicCode+"%") + } + + // 药品类型 + if req.ProductType != nil { + query = query.Where("product_type = ?", req.ProductType) + } + + // 商品状态 + if req.ProductStatus != nil { + query = query.Where("product_status = ?", req.ProductStatus) + } + + // 平台商品id + if req.ProductPlatformId != "" { + query = query.Where("product_platform_id = ?", req.ProductPlatformId) + } + + // 处方平台编码 + if req.ProductPlatformCode != "" { + query = query.Where("product_platform_code LIKE ?", "%"+req.ProductPlatformCode+"%") + } + + // 药店编码 + if req.ProductPharmacyCode != "" { + query = query.Where("product_pharmacy_code LIKE ?", "%"+req.ProductPharmacyCode+"%") + } + + // 批准文号 + if req.LicenseNumber != "" { + query = query.Where("license_number LIKE ?", "%"+req.LicenseNumber+"%") + } + + // 生产厂家 + if req.Manufacturer != "" { + query = query.Where("manufacturer LIKE ?", "%"+req.Manufacturer+"%") + } + + // 商品备注 + if req.ProductRemarks != "" { + query = query.Where("product_remarks LIKE ?", "%"+req.ProductRemarks+"%") + } + } + + // 当前选中数据 + if req.Type == 2 { + if req.Id == "" { + return nil, errors.New("未提供需导出数据编号") + } + + id := strings.Split(req.Id, ",") + query = query.Where("product_id IN (?)", id) + } + + // 排序 + query = query.Order("created_at desc") + + err = query.Find(&m).Error + if err != nil { + return nil, err + } + + return m, nil +} + +// GetProductListSearch 获取系统商品列表-限制条数 +func (r *ProductDao) GetProductListSearch(req requests.GetProductList) (m []*model.Product, err error) { + // 构建查询条件 + query := global.Db.Model(&model.Product{}) + + // 库存表 + query = query.Preload("ProductPlatformAmount", func(db *gorm.DB) *gorm.DB { + return db.Select("amount_id", "product_platform_id", "product_platform_code", "stock") + }) + + // 商品id + if req.ProductId != "" { + query = query.Where("product_id = ?", req.ProductId) + } + + // 商品名称 + if req.ProductName != "" { + query = query.Where("product_name LIKE ?", "%"+req.ProductName+"%") + } + + // 商品通用名 + if req.CommonName != "" { + query = query.Where("common_name LIKE ?", "%"+req.CommonName+"%") + } + + // 商品助记码 + if req.MnemonicCode != "" { + query = query.Where("mnemonic_code LIKE ?", "%"+req.MnemonicCode+"%") + } + + // 药品类型 + if req.ProductType != nil { + query = query.Where("product_type = ?", req.ProductType) + } + + // 是否麻精药品 + if req.IsMajing != nil { + query = query.Where("is_majing = ?", req.IsMajing) + } + + // 商品状态 + if req.ProductStatus != nil { + query = query.Where("product_status = ?", req.ProductStatus) + } + + // 平台商品id + if req.ProductPlatformId != "" { + query = query.Where("product_platform_id = ?", req.ProductPlatformId) + } + + // 处方平台编码 + if req.ProductPlatformCode != "" { + query = query.Where("product_platform_code LIKE ?", "%"+req.ProductPlatformCode+"%") + } + + // 药店编码 + if req.ProductPharmacyCode != "" { + query = query.Where("product_pharmacy_code LIKE ?", "%"+req.ProductPharmacyCode+"%") + } + + // 批准文号 + if req.LicenseNumber != "" { + query = query.Where("license_number LIKE ?", "%"+req.LicenseNumber+"%") + } + + // 生产厂家 + if req.Manufacturer != "" { + query = query.Where("manufacturer LIKE ?", "%"+req.Manufacturer+"%") + } + + // 商品备注 + if req.ProductRemarks != "" { + query = query.Where("product_remarks LIKE ?", "%"+req.ProductRemarks+"%") + } + + query = query.Order("gdxz_product.created_at desc") + + err = query.Limit(req.Limit).Find(&m).Error + if err != nil { + return nil, err + } + + return m, nil +} diff --git a/api/dao/userCoupon.go b/api/dao/userCoupon.go index a3610d5..6a0d67a 100644 --- a/api/dao/userCoupon.go +++ b/api/dao/userCoupon.go @@ -4,7 +4,10 @@ import ( "gorm.io/gorm" "gorm.io/gorm/clause" "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" "hospital-admin-api/global" + "strings" + "time" ) type UserCouponDao struct { @@ -72,6 +75,15 @@ func (r *UserCouponDao) GetUserCouponList(maps interface{}) (m []*model.UserCoup return m, nil } +// GetUserCoupon 获取 +func (r *UserCouponDao) GetUserCoupon(maps interface{}) (m *model.UserCoupon, err error) { + err = global.Db.Where(maps).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + // AddUserCoupon 新增用户优惠卷 func (r *UserCouponDao) AddUserCoupon(tx *gorm.DB, model *model.UserCoupon) (*model.UserCoupon, error) { if err := tx.Create(model).Error; err != nil { @@ -79,3 +91,158 @@ func (r *UserCouponDao) AddUserCoupon(tx *gorm.DB, model *model.UserCoupon) (*mo } return model, nil } + +// GetUserAllObjectTypeCoupon 获取用户某一类型优惠卷 +func (r *UserCouponDao) GetUserAllObjectTypeCoupon(userId int64, distributionObject int) (m []*model.UserCoupon, err error) { + // 构建查询条件 + query := global.Db.Model(&model.UserCoupon{}) + + query = query.Preload("Coupon") + + // 用户优惠卷搜索条件 + query = query.Where("user_id = ?", userId) + + // 获取当前时间 + currentTime := time.Now() + + // 格式化时间为 "Y-m-d H:i:s" + formattedTime := currentTime.Format("2006-01-02 15:04:05") + + query = query.Where("valid_start_time < ?", formattedTime) // 有效使用时间 + query = query.Where("valid_end_time > ?", formattedTime) // 过期使用时间 + + // 优惠卷搜索条件 + subQuery := global.Db.Model(&model.Coupon{}). + Where("gdxz_user_coupon.coupon_id = gdxz_coupon.coupon_id"). + Where("gdxz_coupon.distribution_object = ?", distributionObject). + Where("gdxz_coupon.coupon_client = ?", 1). + Where("gdxz_coupon.coupon_status = ?", 1) + + query = query.Where("EXISTS (?)", subQuery) + + query = query.Group("coupon_id") + + err = query.Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetUserCouponPageSearch 获取用户优惠卷列表-分页 +func (r *UserCouponDao) GetUserCouponPageSearch(req requests.GetUserCouponPage, page, pageSize int) (m []*model.UserCoupon, total int64, err error) { + var totalRecords int64 + + // 构建查询条件 + query := global.Db.Model(&model.UserCoupon{}) + + // 用户 + query = query.Preload("User", func(db *gorm.DB) *gorm.DB { + return db.Omit("user_password", "salt") + }) + + query = query.Preload("Coupon") + + // 优惠卷名称 + if req.CouponName != "" { + subQuery := global.Db.Model(&model.Coupon{}). + Select("coupon_id"). + Where("coupon_name LIKE ?", "%"+req.CouponName+"%") + + query = query.Where(gorm.Expr("coupon_id IN (?)", subQuery)) + } + + // 优惠卷编号 + if req.CouponId != "" { + query = query.Where("coupon_id = ?", req.CouponId) + } + + // 使用状态 + if req.UserCouponStatus != nil { + query = query.Where("user_coupon_status = ?", req.UserCouponStatus) + } + + // 使用时间 + if req.CouponUseDate != "" { + couponUseDate := strings.Split(req.CouponUseDate, "&") + if len(couponUseDate) == 2 { + startTime, _ := time.Parse("2006-01-02", couponUseDate[0]) + endTime, _ := time.Parse("2006-01-02", couponUseDate[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("coupon_use_date BETWEEN ? AND ?", startTime, endTime) + } + } + + // 有效使用时间 + if req.ValidStartTime != "" { + validStartTime := strings.Split(req.ValidStartTime, "&") + if len(validStartTime) == 2 { + startTime, _ := time.Parse("2006-01-02", validStartTime[0]) + endTime, _ := time.Parse("2006-01-02", validStartTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("valid_start_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 过期使用时间 + if req.ValidEndTime != "" { + validEndTime := strings.Split(req.ValidEndTime, "&") + if len(validEndTime) == 2 { + startTime, _ := time.Parse("2006-01-02", validEndTime[0]) + endTime, _ := time.Parse("2006-01-02", validEndTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("valid_end_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 创建时间 + if req.CreatedAt != "" { + createdAt := strings.Split(req.CreatedAt, "&") + if len(createdAt) == 2 { + startTime, _ := time.Parse("2006-01-02", createdAt[0]) + endTime, _ := time.Parse("2006-01-02", createdAt[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("created_at BETWEEN ? AND ?", startTime, endTime) + } + } + + // 手机号 + if req.Mobile != "" { + subQuery := global.Db.Model(&model.User{}). + Select("user_id"). + Where("mobile LIKE ?", "%"+req.Mobile+"%") + + query = query.Where(gorm.Expr("user_id IN (?)", subQuery)) + } + + // 用户名 + if req.UserName != "" { + subQuery := global.Db.Model(&model.UserPatient{}). + Select("user_id"). + Where("user_name LIKE ?", "%"+req.UserName+"%") + + query = query.Where(gorm.Expr("user_id IN (?)", subQuery)) + } + + // 排序 + query = query.Order("created_at desc") + + // 查询总数量 + if err := query.Count(&totalRecords).Error; err != nil { + return nil, 0, err + } + + err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error + if err != nil { + return nil, 0, err + } + return m, totalRecords, nil +} diff --git a/api/dao/userDoctor.go b/api/dao/userDoctor.go index 0ea6ca7..1e2e252 100644 --- a/api/dao/userDoctor.go +++ b/api/dao/userDoctor.go @@ -366,6 +366,11 @@ func (r *UserDoctorDao) GetUserDoctorListSearch(req requests.GetUserDoctorList) return db.Select("hospital_id,hospital_name,hospital_level_name") }) + // 医生id + if req.DoctorId != "" { + query = query.Where("doctor_id = ?", req.DoctorId) + } + // 用户名称 if req.UserName != "" { query = query.Where("user_name LIKE ?", "%"+req.UserName+"%") diff --git a/api/dao/userPatient.go b/api/dao/userPatient.go index 6753c9d..e8d64a1 100644 --- a/api/dao/userPatient.go +++ b/api/dao/userPatient.go @@ -235,3 +235,67 @@ func (r *UserPatientDao) GetUserPatientExportListSearch(req requests.UserPatient return m, nil } + +// GetUserPatientByUserId 获取患者数据-id +func (r *UserPatientDao) GetUserPatientByUserId(userId int64) (m *model.UserPatient, err error) { + err = global.Db.Where("user_id = ?", userId).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetUserPatientListSearch 获取患者列表-限制条数 +func (r *UserPatientDao) GetUserPatientListSearch(req requests.GetUserPatientList) (m []*model.UserPatient, err error) { + + // 构建查询条件 + query := global.Db.Model(&model.UserPatient{}).Omit("open_id", "union_id", "wx_session_key") + + // 用户 + query = query.Preload("User", func(db *gorm.DB) *gorm.DB { + return db.Omit("user_password", "salt") + }) + + // 用户名称 + if req.UserName != "" { + query = query.Where("user_name LIKE ?", "%"+req.UserName+"%") + } + + // 手机号 + if req.Mobile != "" { + subQuery := global.Db.Model(&model.User{}). + Select("user_id"). + Where("mobile = ?", req.Mobile) + + query = query.Where(gorm.Expr("user_id IN (?)", subQuery)) + } + + // 用户状态 + if req.Status != nil { + query = query.Where("status = ?", req.Status) + } + + // 注册时间 + if req.CreatedAt != "" { + cancelTime := strings.Split(req.CreatedAt, "&") + if len(cancelTime) == 2 { + startTime, _ := time.Parse("2006-01-02", cancelTime[0]) + endTime, _ := time.Parse("2006-01-02", cancelTime[1]) + + if startTime == endTime { + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + } + + query = query.Where("created_at BETWEEN ? AND ?", startTime, endTime) + } + } + + // 排序 + query = query.Order("created_at desc") + + err = query.Limit(10).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/dto/CouponGrant.go b/api/dto/CouponGrant.go new file mode 100644 index 0000000..d11ecb8 --- /dev/null +++ b/api/dto/CouponGrant.go @@ -0,0 +1,99 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/model" +) + +// CouponGrantDto 发放优惠券表 +type CouponGrantDto struct { + GrantId string `json:"grant_id"` // 主键id + CouponId string `json:"coupon_id"` // 优惠卷id + GrantType int `json:"grant_type"` // 发放类型(1:具体用户 2:未拥有用户) + UserId string `json:"user_id"` // 用户id(发放类型为具体用户时存在) + TotalQuantity int `json:"total_quantity"` // 目标发放数量 + GrantQuantity int `json:"grant_quantity"` // 已发放数量 + GrantResult int `json:"grant_result"` // 发放结果(1:成功 2:发放中 3:部分 4:失败) + StopReason string `json:"stop_reason"` // 停止原因 + AdminUserId string `json:"admin_user_id"` // 后台操作用户id + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 + UserName string `json:"user_name"` // 用户名称 + AdminUserName string `json:"admin_user_name"` // 操作人名称 +} + +// GetCouponGrantDto 优惠卷详情 +func GetCouponGrantDto(m *model.CouponGrant) *CouponGrantDto { + return &CouponGrantDto{ + GrantId: fmt.Sprintf("%d", m.GrantId), + CouponId: fmt.Sprintf("%d", m.CouponId), + GrantType: m.GrantType, + UserId: fmt.Sprintf("%d", m.UserId), + TotalQuantity: m.TotalQuantity, + GrantQuantity: m.GrantQuantity, + GrantResult: m.GrantResult, + StopReason: m.StopReason, + AdminUserId: fmt.Sprintf("%d", m.AdminUserId), + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +// GetCouponGrantListDto 优惠卷列表 +func GetCouponGrantListDto(m []*model.CouponGrant) []*CouponGrantDto { + // 处理返回值 + responses := make([]*CouponGrantDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &CouponGrantDto{ + GrantId: fmt.Sprintf("%d", v.GrantId), + CouponId: fmt.Sprintf("%d", v.CouponId), + GrantType: v.GrantType, + UserId: fmt.Sprintf("%d", v.UserId), + TotalQuantity: v.TotalQuantity, + GrantQuantity: v.GrantQuantity, + GrantResult: v.GrantResult, + StopReason: v.StopReason, + AdminUserId: fmt.Sprintf("%d", v.AdminUserId), + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + if v.User != nil { + response.LoadUserAttr(v.User) + } + + if v.AdminUserId != 0 { + response.LoadAdminUserName(v.AdminUserId) + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + +// LoadUserAttr 加载用户属性 +func (r *CouponGrantDto) LoadUserAttr(m *model.User) *CouponGrantDto { + if m != nil { + r.UserName = m.UserName + } + return r +} + +// LoadAdminUserName 加载后台用户属性 +func (r *CouponGrantDto) LoadAdminUserName(adminUserId int64) *CouponGrantDto { + if adminUserId != 0 { + // 获取后台操作人记录 + adminUserDao := dao.AdminUserDao{} + adminUser, _ := adminUserDao.GetAdminUserFirstById(adminUserId) + if adminUser != nil { + r.AdminUserName = adminUser.NickName + } + } + return r +} diff --git a/api/dto/DoctorConfigFollowPackage.go b/api/dto/DoctorConfigFollowPackage.go new file mode 100644 index 0000000..a832138 --- /dev/null +++ b/api/dto/DoctorConfigFollowPackage.go @@ -0,0 +1,89 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +// DoctorConfigFollowPackageDto 医生配置-健康包 +type DoctorConfigFollowPackageDto struct { + FollowPackageId string `json:"follow_package_id"` // 主键id + DoctorId string `json:"doctor_id"` // 医生id + MonthlyFrequency int `json:"monthly_frequency"` // 每月次数(0表示不限次) + ServiceRounds int `json:"service_rounds"` // 服务回合数(0表示不限次) + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 + UserDoctor *UserDoctorDto `json:"user_doctor"` // 医生数据 + DoctorInquiryConfig *DoctorInquiryConfigDto `json:"doctor_inquiry_config"` // 医生问诊配置数据 + DoctorConfigFollowPackageItem []*DoctorConfigFollowPackageItemDto `json:"doctor_config_follow_package_item"` // 医生随访包配置明细数据 +} + +func GetDoctorConfigFollowPackageDto(m *model.DoctorConfigFollowPackage) *DoctorConfigFollowPackageDto { + return &DoctorConfigFollowPackageDto{ + FollowPackageId: fmt.Sprintf("%d", m.FollowPackageId), + DoctorId: fmt.Sprintf("%d", m.DoctorId), + MonthlyFrequency: m.MonthlyFrequency, + ServiceRounds: m.ServiceRounds, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +func GetDoctorConfigFollowPackageListDto(m []*model.DoctorConfigFollowPackage) []*DoctorConfigFollowPackageDto { + // 处理返回值 + responses := make([]*DoctorConfigFollowPackageDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &DoctorConfigFollowPackageDto{ + FollowPackageId: fmt.Sprintf("%d", v.FollowPackageId), + DoctorId: fmt.Sprintf("%d", v.DoctorId), + MonthlyFrequency: v.MonthlyFrequency, + ServiceRounds: v.ServiceRounds, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + if v.UserDoctor != nil { + response.LoadUserDoctor(v.UserDoctor) + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + +// LoadUserDoctor 加载医生数据 +func (r *DoctorConfigFollowPackageDto) LoadUserDoctor(m *model.UserDoctor) *DoctorConfigFollowPackageDto { + if m != nil { + r.UserDoctor = GetUserDoctorDto(m) + } + return r +} + +// LoadUserDoctorHospital 加载医生医院数据 +func (r *DoctorConfigFollowPackageDto) LoadUserDoctorHospital(m *model.Hospital) *DoctorConfigFollowPackageDto { + if m != nil && r.UserDoctor != nil { + r.UserDoctor.Hospital = GetHospitalDto(m) + } + return r +} + +// LoadDoctorInquiryConfig 加载医生问诊配置 +func (r *DoctorConfigFollowPackageDto) LoadDoctorInquiryConfig(m *model.DoctorInquiryConfig) *DoctorConfigFollowPackageDto { + if m != nil { + r.DoctorInquiryConfig = GetDoctorInquiryConfigDto(m) + } + return r +} + +// LoadDoctorConfigFollowPackageItem 加载医生随访包列表配置 +func (r *DoctorConfigFollowPackageDto) LoadDoctorConfigFollowPackageItem(m []*model.DoctorConfigFollowPackageItem) *DoctorConfigFollowPackageDto { + if len(m) > 0 { + r.DoctorConfigFollowPackageItem = GetDoctorConfigFollowPackageItemListDto(m) + } + return r +} diff --git a/api/dto/DoctorConfigFollowPackageItem.go b/api/dto/DoctorConfigFollowPackageItem.go new file mode 100644 index 0000000..f5b2589 --- /dev/null +++ b/api/dto/DoctorConfigFollowPackageItem.go @@ -0,0 +1,50 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +// DoctorConfigFollowPackageItemDto 医生配置-随访包-明细 +type DoctorConfigFollowPackageItemDto struct { + FollowPackageItemId string `json:"follow_package_item_id"` // 主键id + FollowPackageId string `json:"follow_package_id"` // 医生随访包id + ServicePeriod int `json:"service_period"` // 服务周期(天) + ServicePrice float64 `json:"service_price"` // 服务价格 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 +} + +func GetDoctorConfigFollowPackageItemDto(m *model.DoctorConfigFollowPackageItem) *DoctorConfigFollowPackageItemDto { + return &DoctorConfigFollowPackageItemDto{ + FollowPackageItemId: fmt.Sprintf("%d", m.FollowPackageItemId), + FollowPackageId: fmt.Sprintf("%d", m.FollowPackageId), + ServicePeriod: m.ServicePeriod, + ServicePrice: m.ServicePrice, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +func GetDoctorConfigFollowPackageItemListDto(m []*model.DoctorConfigFollowPackageItem) []*DoctorConfigFollowPackageItemDto { + // 处理返回值 + responses := make([]*DoctorConfigFollowPackageItemDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &DoctorConfigFollowPackageItemDto{ + FollowPackageItemId: fmt.Sprintf("%d", v.FollowPackageItemId), + FollowPackageId: fmt.Sprintf("%d", v.FollowPackageId), + ServicePeriod: v.ServicePeriod, + ServicePrice: v.ServicePrice, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} diff --git a/api/dto/DoctorConfigHealthPackage.go b/api/dto/DoctorConfigHealthPackage.go new file mode 100644 index 0000000..e18df50 --- /dev/null +++ b/api/dto/DoctorConfigHealthPackage.go @@ -0,0 +1,97 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +// DoctorConfigHealthPackageDto 医生配置-健康包 +type DoctorConfigHealthPackageDto struct { + HealthPackageId string `json:"health_package_id"` // 主键id + DoctorId string `json:"doctor_id"` // 医生id + PackageId string `json:"package_id"` // 健康包配置id + ServicePrice float64 `json:"service_price"` // 服务价格(根据图文问诊价格计算) + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 + HealthPackage *HealthPackageDto `json:"health_package"` // 健康包 + UserDoctor *UserDoctorDto `json:"user_doctor"` // 医生数据 + DoctorInquiryConfig *DoctorInquiryConfigDto `json:"doctor_inquiry_config"` // 医生问诊配置数据 +} + +func GetDoctorConfigHealthPackageDto(m *model.DoctorConfigHealthPackage) *DoctorConfigHealthPackageDto { + return &DoctorConfigHealthPackageDto{ + HealthPackageId: fmt.Sprintf("%d", m.HealthPackageId), + DoctorId: fmt.Sprintf("%d", m.DoctorId), + PackageId: fmt.Sprintf("%d", m.PackageId), + ServicePrice: m.ServicePrice, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +func GetDoctorConfigHealthPackageListDto(m []*model.DoctorConfigHealthPackage) []*DoctorConfigHealthPackageDto { + // 处理返回值 + responses := make([]*DoctorConfigHealthPackageDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &DoctorConfigHealthPackageDto{ + HealthPackageId: fmt.Sprintf("%d", v.HealthPackageId), + DoctorId: fmt.Sprintf("%d", v.DoctorId), + PackageId: fmt.Sprintf("%d", v.PackageId), + ServicePrice: v.ServicePrice, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + if v.HealthPackage != nil { + response.LoadHealthPackage(v.HealthPackage) + } + + if v.UserDoctor != nil { + response.LoadUserDoctor(v.UserDoctor) + } + + if v.UserDoctor.Hospital != nil { + response.LoadUserDoctorHospital(v.UserDoctor.Hospital) + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + +// LoadHealthPackage 加载健康包 +func (r *DoctorConfigHealthPackageDto) LoadHealthPackage(m *model.HealthPackage) *DoctorConfigHealthPackageDto { + if m != nil { + r.HealthPackage = GetHealthPackageDto(m) + } + return r +} + +// LoadUserDoctor 加载医生数据 +func (r *DoctorConfigHealthPackageDto) LoadUserDoctor(m *model.UserDoctor) *DoctorConfigHealthPackageDto { + if m != nil { + r.UserDoctor = GetUserDoctorDto(m) + } + return r +} + +// LoadUserDoctorHospital 加载医生医院数据 +func (r *DoctorConfigHealthPackageDto) LoadUserDoctorHospital(m *model.Hospital) *DoctorConfigHealthPackageDto { + if m != nil && r.UserDoctor != nil { + r.UserDoctor.Hospital = GetHospitalDto(m) + } + return r +} + +// LoadDoctorInquiryConfig 加载医生问诊配置 +func (r *DoctorConfigHealthPackageDto) LoadDoctorInquiryConfig(m *model.DoctorInquiryConfig) *DoctorConfigHealthPackageDto { + if m != nil { + r.DoctorInquiryConfig = GetDoctorInquiryConfigDto(m) + } + return r +} diff --git a/api/dto/DoctotInquiryConfig.go b/api/dto/DoctotInquiryConfig.go index 813834e..d0ed406 100644 --- a/api/dto/DoctotInquiryConfig.go +++ b/api/dto/DoctotInquiryConfig.go @@ -14,7 +14,7 @@ type DoctorInquiryConfigDto struct { IsEnable int `json:"is_enable"` // 是否启用(0:否 1:是) LastEnableMethod int `json:"last_enable_method"` // 最后开启方式(1:自己 2:后台) WorkNumDay int `json:"work_num_day"` // 每日接诊数量 - InquiryPrice float64 `json:"inquiry_price"` // 接诊价格(专家问诊-公益问诊) + InquiryPrice *float64 `json:"inquiry_price"` // 接诊价格(专家问诊-公益问诊) CreatedAt model.LocalTime `json:"created_at"` // 创建时间 UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 DoctorName string `json:"doctor_name"` // 医生姓名 diff --git a/api/dto/HealthPackage.go b/api/dto/HealthPackage.go new file mode 100644 index 0000000..df25e33 --- /dev/null +++ b/api/dto/HealthPackage.go @@ -0,0 +1,68 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +type HealthPackageDto struct { + PackageId string `json:"package_id"` // 主键id + ServiceCount int `json:"service_count"` // 总服务次数 + MonthlyFrequency int `json:"monthly_frequency"` // 每月次数 + EffectiveDays string `json:"effective_days"` // 服务有效天数 + ServiceRate string `json:"service_rate"` // 服务费率。100为满值,表示1,正常费率。 + DiscountProductTotalAmount float64 `json:"discount_product_total_amount"` // 折扣商品总价格 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 + HealthPackageProduct []*HealthPackageProductDto `json:"health_package_product"` // 健康包-关联商品 +} + +func GetHealthPackageDto(m *model.HealthPackage) *HealthPackageDto { + return &HealthPackageDto{ + PackageId: fmt.Sprintf("%d", m.PackageId), + ServiceCount: m.ServiceCount, + MonthlyFrequency: m.MonthlyFrequency, + EffectiveDays: m.EffectiveDays, + ServiceRate: m.ServiceRate, + DiscountProductTotalAmount: m.DiscountProductTotalAmount, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +func GetHealthPackageListDto(m []*model.HealthPackage) []*HealthPackageDto { + // 处理返回值 + responses := make([]*HealthPackageDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &HealthPackageDto{ + PackageId: fmt.Sprintf("%d", v.PackageId), + ServiceCount: v.ServiceCount, + MonthlyFrequency: v.MonthlyFrequency, + EffectiveDays: v.EffectiveDays, + ServiceRate: v.ServiceRate, + DiscountProductTotalAmount: v.DiscountProductTotalAmount, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + if len(v.HealthPackageProduct) > 0 { + response.LoadHealthPackageProduct(v.HealthPackageProduct) + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + +// LoadHealthPackageProduct 加载健康包-关联商品 +func (r *HealthPackageDto) LoadHealthPackageProduct(m []*model.HealthPackageProduct) *HealthPackageDto { + if len(m) > 0 { + r.HealthPackageProduct = GetHealthPackageProductListDto(m) + } + return r +} diff --git a/api/dto/HealthPackageProduct.go b/api/dto/HealthPackageProduct.go new file mode 100644 index 0000000..3043243 --- /dev/null +++ b/api/dto/HealthPackageProduct.go @@ -0,0 +1,56 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +// HealthPackageProductDto 健康包-关联商品 +type HealthPackageProductDto struct { + PackageProductId string `json:"package_product_id"` // 主键id + PackageId string `json:"package_id"` // 健康包id + ProductId string `json:"product_id"` // 商品id + ProductName string `json:"product_name"` // 商品名称 + Quantity int `json:"quantity"` // 数量 + DiscountProductPrice float64 `json:"discount_product_price"` // 折扣商品价格 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 +} + +func GetHealthPackageProductDto(m *model.HealthPackageProduct) *HealthPackageProductDto { + return &HealthPackageProductDto{ + PackageProductId: fmt.Sprintf("%d", m.PackageProductId), + PackageId: fmt.Sprintf("%d", m.PackageId), + ProductId: fmt.Sprintf("%d", m.ProductId), + ProductName: m.ProductName, + Quantity: m.Quantity, + DiscountProductPrice: m.DiscountProductPrice, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +func GetHealthPackageProductListDto(m []*model.HealthPackageProduct) []*HealthPackageProductDto { + // 处理返回值 + responses := make([]*HealthPackageProductDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &HealthPackageProductDto{ + PackageProductId: fmt.Sprintf("%d", v.PackageProductId), + PackageId: fmt.Sprintf("%d", v.PackageId), + ProductId: fmt.Sprintf("%d", v.ProductId), + ProductName: v.ProductName, + Quantity: v.Quantity, + DiscountProductPrice: v.DiscountProductPrice, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} diff --git a/api/dto/OrderInquiry.go b/api/dto/OrderInquiry.go index 991a1ff..0e2bcb5 100644 --- a/api/dto/OrderInquiry.go +++ b/api/dto/OrderInquiry.go @@ -7,6 +7,7 @@ import ( type OrderInquiryDto struct { OrderInquiryId string `json:"order_inquiry_id"` // 主键id + OrderId string `json:"order_id"` // 订单id UserId string `json:"user_id"` // 用户id-患者 PatientId string `json:"patient_id"` // 患者id DoctorId string `json:"doctor_id"` // 医生id(未分配时为null) @@ -62,6 +63,7 @@ func GetOrderInquiryDto(m *model.OrderInquiry) *OrderInquiryDto { return &OrderInquiryDto{ OrderInquiryId: fmt.Sprintf("%d", m.OrderInquiryId), + OrderId: fmt.Sprintf("%d", m.OrderId), UserId: fmt.Sprintf("%d", m.UserId), DoctorId: doctorId, PatientId: fmt.Sprintf("%d", m.PatientId), @@ -107,6 +109,7 @@ func GetOrderInquiryListDto(m []*model.OrderInquiry) []*OrderInquiryDto { for i, v := range m { response := &OrderInquiryDto{ OrderInquiryId: fmt.Sprintf("%d", v.OrderInquiryId), + OrderId: fmt.Sprintf("%d", v.OrderId), UserId: fmt.Sprintf("%d", v.UserId), PatientId: fmt.Sprintf("%d", v.PatientId), DoctorId: fmt.Sprintf("%d", v.DoctorId), @@ -165,6 +168,7 @@ func GetOrderInquiryRecordListDto(m []*model.OrderInquiry) []*OrderInquiryDto { for i, v := range m { response := &OrderInquiryDto{ OrderInquiryId: fmt.Sprintf("%d", v.OrderInquiryId), + OrderId: fmt.Sprintf("%d", v.OrderId), UserId: fmt.Sprintf("%d", v.UserId), PatientId: fmt.Sprintf("%d", v.PatientId), DoctorId: fmt.Sprintf("%d", v.DoctorId), @@ -220,6 +224,7 @@ func GetOrderInquiryForAccountListDto(m []*model.OrderInquiry) []*OrderInquiryDt for i, v := range m { response := &OrderInquiryDto{ OrderInquiryId: fmt.Sprintf("%d", v.OrderInquiryId), + OrderId: fmt.Sprintf("%d", v.OrderId), UserId: fmt.Sprintf("%d", v.UserId), PatientId: fmt.Sprintf("%d", v.PatientId), DoctorId: fmt.Sprintf("%d", v.DoctorId), @@ -276,6 +281,7 @@ func GetOrderInquiryRecordDto(m *model.OrderInquiry) *OrderInquiryDto { return &OrderInquiryDto{ OrderInquiryId: fmt.Sprintf("%d", m.OrderInquiryId), + OrderId: fmt.Sprintf("%d", m.OrderId), UserId: fmt.Sprintf("%d", m.UserId), DoctorId: doctorId, PatientId: fmt.Sprintf("%d", m.PatientId), @@ -331,7 +337,7 @@ func (r *OrderInquiryDto) LoadUserName(m *model.User) *OrderInquiryDto { // LoadOrderInquiryRefund 加载订单退款数据 func (r *OrderInquiryDto) LoadOrderInquiryRefund(m *model.OrderInquiryRefund) *OrderInquiryDto { if m != nil { - d := GetOrderInquiryRefundBankDto(m) + d := GetOrderInquiryRefundDto(m) r.OrderInquiryRefund = d } diff --git a/api/dto/OrderInquiryCase.go b/api/dto/OrderInquiryCase.go index b756891..4f2c4b1 100644 --- a/api/dto/OrderInquiryCase.go +++ b/api/dto/OrderInquiryCase.go @@ -5,7 +5,6 @@ import ( "hospital-admin-api/api/dao" "hospital-admin-api/api/model" "hospital-admin-api/utils" - "strings" ) type OrderInquiryCaseDto struct { @@ -25,7 +24,7 @@ type OrderInquiryCaseDto struct { DiseaseClassName string `json:"disease_class_name"` // 疾病名称-系统 DiagnosisDate model.LocalTime `json:"diagnosis_date"` // 确诊日期 DiseaseDesc string `json:"disease_desc"` // 病情描述(主诉) - DiagnoseImages []*string `json:"diagnose_images"` // 复诊凭证(多个使用逗号分隔) + DiagnoseImages string `json:"diagnose_images"` // 复诊凭证(多个使用逗号分隔) IsAllergyHistory *int `json:"is_allergy_history"` // 是否存在过敏史(0:否 1:是) AllergyHistory string `json:"allergy_history"` // 过敏史描述 IsFamilyHistory *int `json:"is_family_history"` // 是否存在家族病史(0:否 1:是) @@ -48,16 +47,6 @@ type OrderInquiryCaseDto struct { } func GetOrderInquiryCaseDto(m *model.OrderInquiryCase) *OrderInquiryCaseDto { - // 复诊凭证 - var diagnoseImages []*string - if m.DiagnoseImages != "" { - diagnoseImages := strings.Split(m.DiagnoseImages, ",") - - for i, image := range diagnoseImages { - diagnoseImages[i] = utils.AddOssDomain(image) - } - } - return &OrderInquiryCaseDto{ InquiryCaseId: fmt.Sprintf("%d", m.InquiryCaseId), UserId: fmt.Sprintf("%d", m.InquiryCaseId), @@ -75,7 +64,7 @@ func GetOrderInquiryCaseDto(m *model.OrderInquiryCase) *OrderInquiryCaseDto { DiseaseClassName: m.DiseaseClassName, DiagnosisDate: m.DiagnosisDate, DiseaseDesc: m.DiseaseDesc, - DiagnoseImages: diagnoseImages, + DiagnoseImages: m.DiagnoseImages, IsAllergyHistory: m.IsAllergyHistory, AllergyHistory: m.AllergyHistory, IsFamilyHistory: m.IsFamilyHistory, @@ -104,6 +93,7 @@ func GetMaskOrderInquiryCaseDto(m *model.OrderInquiryCase) *OrderInquiryCaseDto DiseaseClassName: m.DiseaseClassName, DiagnosisDate: m.DiagnosisDate, DiseaseDesc: m.DiseaseDesc, + DiagnoseImages: m.DiagnoseImages, CreatedAt: m.CreatedAt, UpdatedAt: m.UpdatedAt, } diff --git a/api/dto/OrderInquiryRefund.go b/api/dto/OrderInquiryRefund.go index 07069a1..acc15a8 100644 --- a/api/dto/OrderInquiryRefund.go +++ b/api/dto/OrderInquiryRefund.go @@ -12,7 +12,7 @@ type OrderInquiryRefundDto struct { InquiryNo string `json:"inquiry_no"` // 系统订单编号 InquiryRefundNo string `json:"inquiry_refund_no"` // 系统退款编号 RefundId string `json:"refund_id"` // 第三方退款单号 - InquiryRefundStatus int `json:"inquiry_refund_status"` // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + InquiryRefundStatus int `json:"inquiry_refund_status"` // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4 // :拒绝退款 5:退款关闭 6:退款异常) RefundTotal float64 `json:"refund_total"` // 退款金额 RefundReason string `json:"refund_reason"` // 退款原因 SuccessTime model.LocalTime `json:"success_time"` // 退款成功时间 @@ -20,7 +20,7 @@ type OrderInquiryRefundDto struct { UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 } -func GetOrderInquiryRefundBankDto(m *model.OrderInquiryRefund) *OrderInquiryRefundDto { +func GetOrderInquiryRefundDto(m *model.OrderInquiryRefund) *OrderInquiryRefundDto { return &OrderInquiryRefundDto{ InquiryRefundId: fmt.Sprintf("%d", m.InquiryRefundId), PatientId: fmt.Sprintf("%d", m.PatientId), diff --git a/api/dto/OrderProduct.go b/api/dto/OrderProduct.go index 032017a..203bcd3 100644 --- a/api/dto/OrderProduct.go +++ b/api/dto/OrderProduct.go @@ -3,6 +3,7 @@ package dto import ( "fmt" "hospital-admin-api/api/model" + "strings" ) // OrderProductDto 订单详情 @@ -10,6 +11,7 @@ type OrderProductDto struct { OrderProductId string `json:"order_product_id"` // 主键id OrderInquiryId string `json:"order_inquiry_id"` // 订单-问诊id;NOT NULL OrderPrescriptionId string `json:"order_prescription_id"` // 订单-处方id;NOT NULL + OrderId string `json:"order_id"` // 订单id DoctorId string `json:"doctor_id"` // 医生id PatientId string `json:"patient_id"` // 患者id FamilyId string `json:"family_id"` // 家庭成员id(就诊用户) @@ -56,6 +58,9 @@ type OrderProductDto struct { UserDoctor *UserDoctorDto `json:"user_doctor"` // 医生数据 OrderPrescription *OrderPrescriptionDto `json:"order_prescription"` // 处方数据 OrderInquiryCase *OrderInquiryCaseDto `json:"order_inquiry_case"` // 问诊病例 + OrderProductCoupon *OrderProductCouponDto `json:"order_product_coupon"` // 优惠卷 + ProductName string `json:"product_name"` // 药品数据 + DiscountAmount float64 `json:"discount_amount"` // 优惠金额 } // OrderProductConsigneeDto 药品订单收货人数据 @@ -113,8 +118,8 @@ func GetOrderProductDto(m *model.OrderProduct) *OrderProductDto { } } -// GetOrderProductConsigneeDtoDto 药品订单收货人数据 -func GetOrderProductConsigneeDtoDto(m *model.OrderProduct) *OrderProductConsigneeDto { +// GetOrderProductConsigneeDto 药品订单收货人数据 +func GetOrderProductConsigneeDto(m *model.OrderProduct) *OrderProductConsigneeDto { return &OrderProductConsigneeDto{ ProvinceId: m.ProvinceId, Province: m.Province, @@ -179,6 +184,11 @@ func GetOrderProductListDto(m []*model.OrderProduct) []*OrderProductDto { response = response.LoadOrderPrescriptionCode(v.OrderPrescription) } + // 加载药品数据 + if v.OrderProductItem != nil { + response = response.LoadProductName(v.OrderProductItem) + } + // 将转换后的结构体添加到新切片中 responses[i] = response } @@ -262,3 +272,31 @@ func (r *OrderProductDto) LoadOrderProductRefund(m *model.OrderProductRefund) *O } return r } + +// LoadOrderProductCoupon 加载药品订单优惠卷数据 +func (r *OrderProductDto) LoadOrderProductCoupon(m *model.OrderProductCoupon) *OrderProductDto { + if m != nil { + d := GetOrderProductCouponDto(m) + + r.OrderProductCoupon = d + } + return r +} + +// LoadProductName 加载药品数据 +func (r *OrderProductDto) LoadProductName(m []*model.OrderProductItem) *OrderProductDto { + if len(m) > 0 { + var products []string + + for _, item := range m { + amount := fmt.Sprintf("%d", item.Amount) + productPrice := fmt.Sprintf("%.2f", item.ProductPrice) + + product := item.ProductName + "(N:" + amount + " " + "P:" + productPrice + ")" + products = append(products, product) + + r.ProductName = strings.Join(products, "; ") + } + } + return r +} diff --git a/api/dto/OrderProductCoupon.go b/api/dto/OrderProductCoupon.go new file mode 100644 index 0000000..dd54eef --- /dev/null +++ b/api/dto/OrderProductCoupon.go @@ -0,0 +1,52 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +type OrderProductCouponDto struct { + OrderCouponId string `json:"order_coupon_id"` // 主键id + OrderProductId string `json:"order_product_id"` // 订单-商品id + UserCouponId string `json:"user_coupon_id"` // 用户优惠卷表id + CouponName string `json:"coupon_name"` // 优惠卷名称 + CouponUsePrice float64 `json:"coupon_use_price"` // 优惠卷使用金额 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 +} + +func GetOrderProductCouponDto(m *model.OrderProductCoupon) *OrderProductCouponDto { + return &OrderProductCouponDto{ + OrderCouponId: fmt.Sprintf("%d", m.OrderCouponId), + OrderProductId: fmt.Sprintf("%d", m.OrderProductId), + UserCouponId: fmt.Sprintf("%d", m.UserCouponId), + CouponName: m.CouponName, + CouponUsePrice: m.CouponUsePrice, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +func GetOrderProductCouponListDto(m []*model.OrderProductCoupon) []OrderProductCouponDto { + // 处理返回值 + responses := make([]OrderProductCouponDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := OrderProductCouponDto{ + OrderCouponId: fmt.Sprintf("%d", v.OrderCouponId), + OrderProductId: fmt.Sprintf("%d", v.OrderProductId), + UserCouponId: fmt.Sprintf("%d", v.UserCouponId), + CouponName: v.CouponName, + CouponUsePrice: v.CouponUsePrice, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} diff --git a/api/dto/OrderServicePackage.go b/api/dto/OrderServicePackage.go new file mode 100644 index 0000000..a32aa5b --- /dev/null +++ b/api/dto/OrderServicePackage.go @@ -0,0 +1,299 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +// OrderServicePackageDto 订单-服务包 +type OrderServicePackageDto struct { + OrderServiceId string `json:"order_service_id"` // 主键id + OrderId string `json:"order_id"` // 订单id + UserId string `json:"user_id"` // 用户id-患者 + PatientId string `json:"patient_id"` // 患者id + DoctorId string `json:"doctor_id"` // 医生id + FamilyId string `json:"family_id"` // 家庭成员id(就诊用户) + OrderServiceType int `json:"order_service_type"` // 服务包类型(1:健康包 2:随访包) + OrderServiceStatus int `json:"order_service_status"` // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + IsDelete int `json:"is_delete"` // 删除状态(0:否 1:是) + RefundStatus int `json:"refund_status"` // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款) + PayChannel int `json:"pay_channel"` // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) + PayStatus int `json:"pay_status"` // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + OrderServiceNo string `json:"order_service_no"` // 系统订单编号 + EscrowTradeNo string `json:"escrow_trade_no"` // 第三方支付流水号 + AmountTotal float64 `json:"amount_total"` // 订单金额 + CouponAmountTotal float64 `json:"coupon_amount_total"` // 优惠卷总金额 + PaymentAmountTotal float64 `json:"payment_amount_total"` // 实际付款金额 + PayTime model.LocalTime `json:"pay_time"` // 支付时间 + StartTime model.LocalTime `json:"start_time"` // 开始服务时间 + FinishTime model.LocalTime `json:"finish_time"` // 结束服务时间 + CancelTime model.LocalTime `json:"cancel_time"` // 订单取消时间 + CancelReason int `json:"cancel_reason"` // 取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时) + CancelRemarks string `json:"cancel_remarks"` // 取消订单备注 + AddFinishStatus int `json:"add_finish_status"` // 添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败) + AddFinishTime model.LocalTime `json:"add_finish_time"` // 添加完成订单延迟队列时间 + AddFinishFailReason string `json:"add_finish_fail_reason"` // 添加完成订单延迟队列失败原因 + PatientName string `json:"patient_name"` // 患者姓名-就诊人 + PatientNameMask string `json:"patient_name_mask"` // 患者姓名-就诊人(掩码) + PatientSex int `json:"patient_sex"` // 患者性别-就诊人(0:未知 1:男 2:女) + PatientAge int `json:"patient_age"` // 患者年龄-就诊人 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间 + DoctorName string `json:"doctor_name"` // 医生姓名 + UserName string `json:"user_name"` // 用户姓名(患者) + UserDoctor *UserDoctorDto `json:"user_doctor"` // 医生数据 + OrderServicePackageCase *OrderServicePackageCaseDto `json:"order_service_package_case"` // 病例 + OrderServicePackageRefund *OrderServicePackageRefundDto `json:"order_service_package_refund"` // 退款数据 +} + +// OrderServicePackageDetailInfoDto 服务包权益 +type OrderServicePackageDetailInfoDto struct { + OrderServiceId string `json:"order_service_id"` // 主键id + OrderId string `json:"order_id"` // 订单id + UserId string `json:"user_id"` // 用户id-患者 + PatientId string `json:"patient_id"` // 患者id + DoctorId string `json:"doctor_id"` // 医生id + FamilyId string `json:"family_id"` // 家庭成员id(就诊用户) + OrderServiceType int `json:"order_service_type"` // 服务包类型(1:健康包 2:随访包) + OrderServiceStatus int `json:"order_service_status"` // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + IsDelete int `json:"is_delete"` // 删除状态(0:否 1:是) + OrderServiceNo string `json:"order_service_no"` // 系统订单编号 + PayTime model.LocalTime `json:"pay_time"` // 支付时间 + StartTime model.LocalTime `json:"start_time"` // 开始服务时间 + FinishTime model.LocalTime `json:"finish_time"` // 结束服务时间 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + OrderProduct []*OrderProductDto `json:"order_product"` // 关联商品订单 + OrderInquiry []*OrderInquiryDto `json:"order_inquiry"` // 关联问诊订单 + UserCoupon []*UserCouponDto `json:"user_coupon"` // 关联优惠卷 + OrderServicePackageCase *OrderServicePackageCaseDto `json:"order_service_package_case"` // 关联病例 + OrderServicePackageDetail *OrderServicePackageDetailDto `json:"order_service_package_detail"` // 服务包订单详情 + CurrentMonthStartDate string `json:"current_month_start_date"` // 当月开始时间 + CurrentMonthFinishDate string `json:"current_month_finish_date"` // 当月结束时间 + MonthInquiryCount int `json:"month_inquiry_count"` // 当月问诊次数 + RemainingInquiryCount string `json:"remaining_inquiry_count"` // 当月剩余问诊次数 +} + +// GetOrderServicePackageDto 服务包订单详情 +func GetOrderServicePackageDto(m *model.OrderServicePackage) *OrderServicePackageDto { + return &OrderServicePackageDto{ + OrderServiceId: fmt.Sprintf("%d", m.OrderServiceId), + OrderId: fmt.Sprintf("%d", m.OrderId), + UserId: fmt.Sprintf("%d", m.UserId), + PatientId: fmt.Sprintf("%d", m.PatientId), + DoctorId: fmt.Sprintf("%d", m.DoctorId), + FamilyId: fmt.Sprintf("%d", m.FamilyId), + OrderServiceType: m.OrderServiceType, + OrderServiceStatus: m.OrderServiceStatus, + IsDelete: m.IsDelete, + RefundStatus: m.RefundStatus, + PayChannel: m.PayChannel, + PayStatus: m.PayStatus, + OrderServiceNo: m.OrderServiceNo, + EscrowTradeNo: m.EscrowTradeNo, + AmountTotal: m.AmountTotal, + CouponAmountTotal: m.CouponAmountTotal, + PaymentAmountTotal: m.PaymentAmountTotal, + PayTime: m.PayTime, + StartTime: m.StartTime, + FinishTime: m.FinishTime, + CancelTime: m.CancelTime, + CancelReason: m.CancelReason, + CancelRemarks: m.CancelRemarks, + AddFinishStatus: m.AddFinishStatus, + AddFinishTime: m.AddFinishTime, + AddFinishFailReason: m.AddFinishFailReason, + PatientName: m.PatientName, + PatientNameMask: m.PatientNameMask, + PatientSex: m.PatientSex, + PatientAge: m.PatientAge, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +// GetOrderServicePackageListDto 服务包订单列表 +func GetOrderServicePackageListDto(m []*model.OrderServicePackage) []*OrderServicePackageDto { + // 处理返回值 + responses := make([]*OrderServicePackageDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &OrderServicePackageDto{ + OrderServiceId: fmt.Sprintf("%d", v.OrderServiceId), + OrderId: fmt.Sprintf("%d", v.OrderId), + UserId: fmt.Sprintf("%d", v.UserId), + PatientId: fmt.Sprintf("%d", v.PatientId), + DoctorId: fmt.Sprintf("%d", v.DoctorId), + FamilyId: fmt.Sprintf("%d", v.FamilyId), + OrderServiceType: v.OrderServiceType, + OrderServiceStatus: v.OrderServiceStatus, + IsDelete: v.IsDelete, + RefundStatus: v.RefundStatus, + PayChannel: v.PayChannel, + PayStatus: v.PayStatus, + OrderServiceNo: v.OrderServiceNo, + EscrowTradeNo: v.EscrowTradeNo, + AmountTotal: v.AmountTotal, + CouponAmountTotal: v.CouponAmountTotal, + PaymentAmountTotal: v.PaymentAmountTotal, + PayTime: v.PayTime, + StartTime: v.StartTime, + FinishTime: v.FinishTime, + CancelTime: v.CancelTime, + CancelReason: v.CancelReason, + CancelRemarks: v.CancelRemarks, + AddFinishStatus: v.AddFinishStatus, + AddFinishTime: v.AddFinishTime, + AddFinishFailReason: v.AddFinishFailReason, + PatientName: v.PatientName, + PatientNameMask: v.PatientNameMask, + PatientSex: v.PatientSex, + PatientAge: v.PatientAge, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 加载医生名称 + if v.UserDoctor != nil { + response = response.LoadDoctorName(v.UserDoctor) + } + + // 加载用户姓名(患者) + if v.User != nil { + response = response.LoadUserName(v.User) + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + +// GetOrderServicePackageDetailInfoDto 服务包权益详情 +func GetOrderServicePackageDetailInfoDto(m *model.OrderServicePackage) *OrderServicePackageDetailInfoDto { + return &OrderServicePackageDetailInfoDto{ + OrderServiceId: fmt.Sprintf("%d", m.OrderServiceId), + OrderId: fmt.Sprintf("%d", m.OrderId), + UserId: fmt.Sprintf("%d", m.UserId), + PatientId: fmt.Sprintf("%d", m.PatientId), + DoctorId: fmt.Sprintf("%d", m.DoctorId), + FamilyId: fmt.Sprintf("%d", m.FamilyId), + OrderServiceType: m.OrderServiceType, + OrderServiceStatus: m.OrderServiceStatus, + IsDelete: m.IsDelete, + OrderServiceNo: m.OrderServiceNo, + PayTime: m.PayTime, + StartTime: m.StartTime, + FinishTime: m.FinishTime, + CreatedAt: m.CreatedAt, + } +} + +// LoadDoctorName 加载医生名称 +func (r *OrderServicePackageDto) LoadDoctorName(m *model.UserDoctor) *OrderServicePackageDto { + if m != nil { + r.DoctorName = m.UserName + } + return r +} + +// LoadUserName 加载用户姓名(患者) +func (r *OrderServicePackageDto) LoadUserName(m *model.User) *OrderServicePackageDto { + if m != nil { + r.UserName = m.UserName + } + return r +} + +// LoadOrderServicePackageRefund 加载订单退款数据 +func (r *OrderServicePackageDto) LoadOrderServicePackageRefund(m *model.OrderServicePackageRefund) *OrderServicePackageDto { + if m != nil { + d := GetOrderServicePackageRefundDto(m) + + r.OrderServicePackageRefund = d + } + return r +} + +// LoadMaskOrderServicePackageCase 加载病例 +func (r *OrderServicePackageDto) LoadMaskOrderServicePackageCase(m *model.OrderServicePackageCase) *OrderServicePackageDto { + if m != nil { + d := GetOrderServicePackageCaseDto(m) + + r.OrderServicePackageCase = d + } + return r +} + +// LoadOrderServicePackageProduct 加载关联商品订单 +func (r *OrderServicePackageDetailInfoDto) LoadOrderServicePackageProduct(m []*model.OrderServicePackageProduct) *OrderServicePackageDetailInfoDto { + if len(m) > 0 { + responses := make([]*OrderProductDto, len(m)) + + for i, product := range m { + if product.OrderProduct != nil { + // 将转换后的结构体添加到新切片中 + response := GetOrderProductDto(product.OrderProduct) + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + r.OrderProduct = responses + } + return r +} + +// LoadOrderServicePackageInquiry 加载关联问诊订单 +func (r *OrderServicePackageDetailInfoDto) LoadOrderServicePackageInquiry(m []*model.OrderServicePackageInquiry) *OrderServicePackageDetailInfoDto { + if len(m) > 0 { + responses := make([]*OrderInquiryDto, len(m)) + + for i, inquiry := range m { + if inquiry.OrderInquiry != nil { + // 将转换后的结构体添加到新切片中 + response := GetOrderInquiryDto(inquiry.OrderInquiry) + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + r.OrderInquiry = responses + } + return r +} + +// LoadUserCoupon 加载优惠卷数据 +func (r *OrderServicePackageDetailInfoDto) LoadUserCoupon(m []*model.UserCoupon) *OrderServicePackageDetailInfoDto { + if len(m) > 0 { + d := GetUserCouponListDto(m) + + r.UserCoupon = d + } + return r +} + +// LoadOrderServicePackageDetail 加载服务包订单详情数据 +func (r *OrderServicePackageDetailInfoDto) LoadOrderServicePackageDetail(m *model. + OrderServicePackageDetail) *OrderServicePackageDetailInfoDto { + if m != nil { + d := GetOrderServicePackageDetailDto(m) + + r.OrderServicePackageDetail = d + } + return r +} + +// LoadOrderServicePackageCase 加载服务包订单关联病例数据 +func (r *OrderServicePackageDetailInfoDto) LoadOrderServicePackageCase(m *model.OrderServicePackageCase) *OrderServicePackageDetailInfoDto { + if m != nil { + d := GetOrderServicePackageCaseDto(m) + + r.OrderServicePackageCase = d + } + return r +} diff --git a/api/dto/OrderServicePackageCase.go b/api/dto/OrderServicePackageCase.go new file mode 100644 index 0000000..230ef3b --- /dev/null +++ b/api/dto/OrderServicePackageCase.go @@ -0,0 +1,106 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +// OrderServicePackageCaseDto 订单-服务包病例表 +type OrderServicePackageCaseDto struct { + OrderServiceCaseId string `json:"order_service_case_id"` // 主键id + UserId string `json:"user_id"` // 用户id; NOT NULL + PatientId string `json:"patient_id"` // 患者id; NOT NULL + OrderId string `json:"order_id"` // 订单id; NOT NULL + OrderServiceId string `json:"order_service_id"` // 订单-服务包id; NOT NULL + FamilyId string `json:"family_id"` // 家庭成员id; NOT NULL + DiseaseClassId string `json:"disease_class_id"` // 疾病分类id-系统 + Relation int `json:"relation"` // 与患者关系(1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他 ) + Status int `json:"status"` // 状态(1:正常 2:删除) + Name string `json:"name"` // 患者名称 + Sex int `json:"sex"` // 患者性别(0:未知 1:男 2:女) + Age int `json:"age"` // 患者年龄 + DiseaseClassName string `json:"disease_class_name"` // 疾病名称-系统 + DiagnosisDate model.LocalTime `json:"diagnosis_date"` // 确诊日期 + DiseaseDesc string `json:"disease_desc"` // 病情描述(主诉) + DiagnoseImages string `json:"diagnose_images"` // 复诊凭证(多个使用逗号分隔) + IsAllergyHistory int `json:"is_allergy_history"` // 是否存在过敏史(0:否 1:是) + AllergyHistory string `json:"allergy_history"` // 过敏史描述 + IsFamilyHistory int `json:"is_family_history"` // 是否存在家族病史(0:否 1:是) + FamilyHistory string `json:"family_history"` // 家族病史描述 + IsPregnant int `json:"is_pregnant"` // 是否备孕、妊娠、哺乳期(0:否 1:是) + Pregnant string `json:"pregnant"` // 备孕、妊娠、哺乳期描述 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 +} + +// GetOrderServicePackageCaseDto 服务包订单病例详情 +func GetOrderServicePackageCaseDto(m *model.OrderServicePackageCase) *OrderServicePackageCaseDto { + return &OrderServicePackageCaseDto{ + OrderServiceCaseId: fmt.Sprintf("%d", m.OrderServiceCaseId), + UserId: fmt.Sprintf("%d", m.UserId), + PatientId: fmt.Sprintf("%d", m.PatientId), + OrderId: fmt.Sprintf("%d", m.OrderId), + OrderServiceId: fmt.Sprintf("%d", m.OrderServiceId), + FamilyId: fmt.Sprintf("%d", m.FamilyId), + DiseaseClassId: fmt.Sprintf("%d", m.DiseaseClassId), + Relation: m.Relation, + Status: m.Status, + Name: m.Name, + Sex: m.Sex, + Age: m.Age, + DiseaseClassName: m.DiseaseClassName, + DiagnosisDate: m.DiagnosisDate, + DiseaseDesc: m.DiseaseDesc, + DiagnoseImages: m.DiagnoseImages, + IsAllergyHistory: m.IsAllergyHistory, + AllergyHistory: m.AllergyHistory, + IsFamilyHistory: m.IsFamilyHistory, + FamilyHistory: m.FamilyHistory, + IsPregnant: m.IsPregnant, + Pregnant: m.Pregnant, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +// GetOrderServicePackageCaseListDto 服务包订单病例列表 +func GetOrderServicePackageCaseListDto(m []*model.OrderServicePackageCase) []*OrderServicePackageCaseDto { + // 处理返回值 + responses := make([]*OrderServicePackageCaseDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &OrderServicePackageCaseDto{ + OrderServiceCaseId: fmt.Sprintf("%d", v.OrderServiceCaseId), + UserId: fmt.Sprintf("%d", v.UserId), + PatientId: fmt.Sprintf("%d", v.PatientId), + OrderId: fmt.Sprintf("%d", v.OrderId), + OrderServiceId: fmt.Sprintf("%d", v.OrderServiceId), + FamilyId: fmt.Sprintf("%d", v.FamilyId), + DiseaseClassId: fmt.Sprintf("%d", v.DiseaseClassId), + Relation: v.Relation, + Status: v.Status, + Name: v.Name, + Sex: v.Sex, + Age: v.Age, + DiseaseClassName: v.DiseaseClassName, + DiagnosisDate: v.DiagnosisDate, + DiseaseDesc: v.DiseaseDesc, + DiagnoseImages: v.DiagnoseImages, + IsAllergyHistory: v.IsAllergyHistory, + AllergyHistory: v.AllergyHistory, + IsFamilyHistory: v.IsFamilyHistory, + FamilyHistory: v.FamilyHistory, + IsPregnant: v.IsPregnant, + Pregnant: v.Pregnant, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} diff --git a/api/dto/OrderServicePackageDetail.go b/api/dto/OrderServicePackageDetail.go new file mode 100644 index 0000000..f72856e --- /dev/null +++ b/api/dto/OrderServicePackageDetail.go @@ -0,0 +1,77 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +// OrderServicePackageDetailDto 订单-服务包详情表 +type OrderServicePackageDetailDto struct { + OrderServiceDetailId string `json:"order_service_detail_id"` // 主键id + OrderServiceId string `json:"order_service_id"` // 服务包订单id + OrderId string `json:"order_id"` // 订单id + PackageId string `json:"package_id"` // 健康包配置id(随访包时为空) + OrderServiceNo string `json:"order_service_no"` // 系统订单编号 + ServicePeriod int `json:"service_period"` // 服务周期(天) + ServiceCount int `json:"service_count"` // 总服务次数(0表示不限次) + MonthlyFrequency int `json:"monthly_frequency"` // 每月次数(0表示不限次) + SingleInquiryPrice float64 `json:"single_inquiry_price"` // 单次图文问诊价格 + ServicePrice float64 `json:"service_price"` // 总服务价格 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 + RemainingQuantity int `json:"remaining_quantity"` // 药品的剩余数量 +} + +// GetOrderServicePackageDetailDto 订单-服务包详情详情 +func GetOrderServicePackageDetailDto(m *model.OrderServicePackageDetail) *OrderServicePackageDetailDto { + return &OrderServicePackageDetailDto{ + OrderServiceDetailId: fmt.Sprintf("%d", m.OrderServiceDetailId), + OrderServiceId: fmt.Sprintf("%d", m.OrderServiceId), + OrderId: fmt.Sprintf("%d", m.OrderId), + PackageId: fmt.Sprintf("%d", m.PackageId), + OrderServiceNo: m.OrderServiceNo, + ServicePeriod: m.ServicePeriod, + ServiceCount: m.ServiceCount, + MonthlyFrequency: m.MonthlyFrequency, + SingleInquiryPrice: m.SingleInquiryPrice, + ServicePrice: m.ServicePrice, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +// GetOrderServicePackageDetailListDto 订单-服务包详情列表 +func GetOrderServicePackageDetailListDto(m []*model.OrderServicePackageDetail) []*OrderServicePackageDetailDto { + // 处理返回值 + responses := make([]*OrderServicePackageDetailDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &OrderServicePackageDetailDto{ + OrderServiceDetailId: fmt.Sprintf("%d", v.OrderServiceDetailId), + OrderServiceId: fmt.Sprintf("%d", v.OrderServiceId), + OrderId: fmt.Sprintf("%d", v.OrderId), + PackageId: fmt.Sprintf("%d", v.PackageId), + OrderServiceNo: v.OrderServiceNo, + ServicePeriod: v.ServicePeriod, + ServiceCount: v.ServiceCount, + MonthlyFrequency: v.MonthlyFrequency, + SingleInquiryPrice: v.SingleInquiryPrice, + ServicePrice: v.ServicePrice, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + +// LoadRemainingQuantity 加载药品剩余数量 +func (r *OrderServicePackageDetailDto) LoadRemainingQuantity(remainingQuantity int) *OrderServicePackageDetailDto { + r.RemainingQuantity = remainingQuantity + return r +} diff --git a/api/dto/OrderServicePackageInquiry.go b/api/dto/OrderServicePackageInquiry.go new file mode 100644 index 0000000..8e3cd4c --- /dev/null +++ b/api/dto/OrderServicePackageInquiry.go @@ -0,0 +1,71 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +// OrderServicePackageInquiryDto 服务包关联问诊订单表 +type OrderServicePackageInquiryDto struct { + ServiceInquiryId string `json:"service_inquiry_id"` // 主键id + OrderServiceId string `json:"order_service_id"` // 订单-服务包id + OrderInquiryId string `json:"order_inquiry_id"` // 订单-问诊id + OrderServiceNo string `json:"order_service_no"` // 服务包系统订单编号 + InquiryNo string `json:"inquiry_no"` // 问诊系统订单编号 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 + OrderInquiry *OrderInquiryDto `json:"order_inquiry"` // 问诊订单 +} + +// GetOrderServicePackageInquiryDto 服务包关联问诊订单详情 +func GetOrderServicePackageInquiryDto(m *model.OrderServicePackageInquiry) *OrderServicePackageInquiryDto { + return &OrderServicePackageInquiryDto{ + ServiceInquiryId: fmt.Sprintf("%d", m.ServiceInquiryId), + OrderServiceId: fmt.Sprintf("%d", m.OrderServiceId), + OrderInquiryId: fmt.Sprintf("%d", m.OrderInquiryId), + OrderServiceNo: m.OrderServiceNo, + InquiryNo: m.InquiryNo, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +// GetOrderServicePackageInquiryListDto 服务包关联问诊订单列表 +func GetOrderServicePackageInquiryListDto(m []*model.OrderServicePackageInquiry) []*OrderServicePackageInquiryDto { + // 处理返回值 + responses := make([]*OrderServicePackageInquiryDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &OrderServicePackageInquiryDto{ + ServiceInquiryId: fmt.Sprintf("%d", v.ServiceInquiryId), + OrderServiceId: fmt.Sprintf("%d", v.OrderServiceId), + OrderInquiryId: fmt.Sprintf("%d", v.OrderInquiryId), + OrderServiceNo: v.OrderServiceNo, + InquiryNo: v.InquiryNo, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 加载问诊订单数据 + if v.OrderInquiry != nil { + response = response.LoadOrderInquiry(v.OrderInquiry) + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + +// LoadOrderInquiry 加载问诊订单数据 +func (r *OrderServicePackageInquiryDto) LoadOrderInquiry(m *model.OrderInquiry) *OrderServicePackageInquiryDto { + if m != nil { + d := GetOrderInquiryDto(m) + + r.OrderInquiry = d + } + return r +} diff --git a/api/dto/OrderServicePackageProduct.go b/api/dto/OrderServicePackageProduct.go new file mode 100644 index 0000000..2e24fb8 --- /dev/null +++ b/api/dto/OrderServicePackageProduct.go @@ -0,0 +1,77 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +// OrderServicePackageProductDto 订单-服务包-关联商品订单表 +type OrderServicePackageProductDto struct { + ServiceProductId string `json:"service_product_id"` // 主键id + OrderServiceId string `json:"order_service_id"` // 订单-服务包id + OrderProductId string `json:"order_product_id"` // 订单-商品id + OrderProductNo string `json:"order_product_no"` // 订单-商品系统编号 + ProductItemId string `json:"product_item_id"` // 订单-商品明细id + ProductId string `json:"product_id"` // 商品id + UsedQuantity int `json:"used_quantity"` // 商品使用数量 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 + OrderProduct *OrderProductDto `json:"order_product"` // 药品订单 +} + +// GetOrderServicePackageProductDto 服务包订单病例详情 +func GetOrderServicePackageProductDto(m *model.OrderServicePackageProduct) *OrderServicePackageProductDto { + return &OrderServicePackageProductDto{ + ServiceProductId: fmt.Sprintf("%d", m.ServiceProductId), + OrderServiceId: fmt.Sprintf("%d", m.OrderServiceId), + OrderProductId: fmt.Sprintf("%d", m.OrderProductId), + OrderProductNo: m.OrderProductNo, + ProductItemId: fmt.Sprintf("%d", m.ProductItemId), + ProductId: fmt.Sprintf("%d", m.ProductId), + UsedQuantity: m.UsedQuantity, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +// GetOrderServicePackageProductListDto 服务包订单病例列表 +func GetOrderServicePackageProductListDto(m []*model.OrderServicePackageProduct) []*OrderServicePackageProductDto { + // 处理返回值 + responses := make([]*OrderServicePackageProductDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &OrderServicePackageProductDto{ + ServiceProductId: fmt.Sprintf("%d", v.ServiceProductId), + OrderServiceId: fmt.Sprintf("%d", v.OrderServiceId), + OrderProductId: fmt.Sprintf("%d", v.OrderProductId), + OrderProductNo: v.OrderProductNo, + ProductItemId: fmt.Sprintf("%d", v.ProductItemId), + ProductId: fmt.Sprintf("%d", v.ProductId), + UsedQuantity: v.UsedQuantity, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 加载问诊订单数据 + if v.OrderProduct != nil { + response = response.LoadOrderProduct(v.OrderProduct) + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + +// LoadOrderProduct 加载药品订单数据 +func (r *OrderServicePackageProductDto) LoadOrderProduct(m *model.OrderProduct) *OrderServicePackageProductDto { + if m != nil { + d := GetOrderProductDto(m) + + r.OrderProduct = d + } + return r +} diff --git a/api/dto/OrderServicePackageRefund.go b/api/dto/OrderServicePackageRefund.go new file mode 100644 index 0000000..799a99c --- /dev/null +++ b/api/dto/OrderServicePackageRefund.go @@ -0,0 +1,70 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +// OrderServicePackageRefundDto 订单-服务包-退款表 +type OrderServicePackageRefundDto struct { + ServiceRefundId string `json:"service_refund_id"` // 主键id + PatientId string `json:"patient_id"` // 患者id + OrderServiceId string `json:"order_service_id"` // 订单-服务包id + OrderServiceNo string `json:"order_service_no"` // 系统订单编号 + ServiceRefundNo string `json:"service_refund_no"` // 系统退款编号 + RefundId string `json:"refund_id"` // 第三方退款单号 + RefundStatus int `json:"refund_status"` // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6 // :退款异常 7:部分退款) + RefundTotal float64 `json:"refund_total"` // 退款金额 + RefundReason string `json:"refund_reason"` // 退款原因 + SuccessTime model.LocalTime `json:"success_time"` // 退款成功时间 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 +} + +// GetOrderServicePackageRefundDto 服务包订单病例详情 +func GetOrderServicePackageRefundDto(m *model.OrderServicePackageRefund) *OrderServicePackageRefundDto { + return &OrderServicePackageRefundDto{ + ServiceRefundId: fmt.Sprintf("%d", m.ServiceRefundId), + PatientId: fmt.Sprintf("%d", m.PatientId), + OrderServiceId: fmt.Sprintf("%d", m.OrderServiceId), + OrderServiceNo: m.OrderServiceNo, + ServiceRefundNo: m.ServiceRefundNo, + RefundId: m.RefundId, + RefundStatus: m.RefundStatus, + RefundTotal: m.RefundTotal, + RefundReason: m.RefundReason, + SuccessTime: m.SuccessTime, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +// GetOrderServicePackageRefundListDto 服务包订单病例列表 +func GetOrderServicePackageRefundListDto(m []*model.OrderServicePackageRefund) []*OrderServicePackageRefundDto { + // 处理返回值 + responses := make([]*OrderServicePackageRefundDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &OrderServicePackageRefundDto{ + ServiceRefundId: fmt.Sprintf("%d", v.ServiceRefundId), + PatientId: fmt.Sprintf("%d", v.PatientId), + OrderServiceId: fmt.Sprintf("%d", v.OrderServiceId), + OrderServiceNo: v.OrderServiceNo, + ServiceRefundNo: v.ServiceRefundNo, + RefundId: v.RefundId, + RefundStatus: v.RefundStatus, + RefundTotal: v.RefundTotal, + RefundReason: v.RefundReason, + SuccessTime: v.SuccessTime, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} diff --git a/api/dto/UserCoupon.go b/api/dto/UserCoupon.go new file mode 100644 index 0000000..a03a1e3 --- /dev/null +++ b/api/dto/UserCoupon.go @@ -0,0 +1,94 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" +) + +// UserCouponDto 用户优惠卷表 +type UserCouponDto struct { + UserCouponId string `json:"user_coupon_id"` // 主键id + UserId string `json:"user_id"` // 用户id + PatientId string `json:"patient_id"` // 患者id + CouponId string `json:"coupon_id"` // 优惠卷id + UserCouponStatus int `json:"user_coupon_status"` // 状态(0:未使用 1:已使用 3:已过期) + CouponUseDate *model.LocalTime `json:"coupon_use_date"` // 使用时间 + ValidStartTime model.LocalTime `json:"valid_start_time"` // 有效使用时间 + ValidEndTime model.LocalTime `json:"valid_end_time"` // 过期使用时间 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 + Coupon *CouponDto `json:"coupon"` // 优惠卷 + UserName string `json:"user_name"` // 用户名称 +} + +// GetUserCouponDto 用户优惠卷详情 +func GetUserCouponDto(m *model.UserCoupon) *UserCouponDto { + return &UserCouponDto{ + UserCouponId: fmt.Sprintf("%d", m.UserCouponId), + UserId: fmt.Sprintf("%d", m.UserId), + PatientId: fmt.Sprintf("%d", m.PatientId), + CouponId: fmt.Sprintf("%d", m.CouponId), + UserCouponStatus: m.UserCouponStatus, + CouponUseDate: m.CouponUseDate, + ValidStartTime: model.LocalTime(m.ValidStartTime), + ValidEndTime: model.LocalTime(m.ValidEndTime), + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +// GetUserCouponListDto 用户优惠卷列表 +func GetUserCouponListDto(m []*model.UserCoupon) []*UserCouponDto { + // 处理返回值 + responses := make([]*UserCouponDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &UserCouponDto{ + UserCouponId: fmt.Sprintf("%d", v.UserCouponId), + UserId: fmt.Sprintf("%d", v.UserId), + PatientId: fmt.Sprintf("%d", v.PatientId), + CouponId: fmt.Sprintf("%d", v.CouponId), + UserCouponStatus: v.UserCouponStatus, + CouponUseDate: v.CouponUseDate, + ValidStartTime: model.LocalTime(v.ValidStartTime), + ValidEndTime: model.LocalTime(v.ValidEndTime), + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 加载优惠卷数据 + if v.Coupon != nil { + response = response.LoadCoupon(v.Coupon) + } + + // 加载用户属性 + if v.User != nil { + response = response.LoadUserAttr(v.User) + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + +// LoadCoupon 加载优惠卷数据 +func (r *UserCouponDto) LoadCoupon(m *model.Coupon) *UserCouponDto { + if m != nil { + d := GetCouponDto(m) + + r.Coupon = d + } + return r +} + +// LoadUserAttr 加载用户属性 +func (r *UserCouponDto) LoadUserAttr(m *model.User) *UserCouponDto { + if m != nil { + r.UserName = m.UserName + } + return r +} diff --git a/api/dto/coupon.go b/api/dto/coupon.go new file mode 100644 index 0000000..9802b08 --- /dev/null +++ b/api/dto/coupon.go @@ -0,0 +1,150 @@ +package dto + +import ( + "fmt" + "hospital-admin-api/api/model" + "hospital-admin-api/utils" + "strings" +) + +// CouponDto 优惠卷表 +type CouponDto struct { + CouponId string `json:"coupon_id"` // 主键id + CouponName string `json:"coupon_name"` // 优惠卷名称 + CouponIcon string `json:"coupon_icon"` // 优惠卷图片 + CouponClient int `json:"coupon_client"` // 使用平台(1:小程序) + CouponType int `json:"coupon_type"` // 优惠卷类型(1:无门槛 2:满减 3:数量) + CouponStatus int `json:"coupon_status"` // 状态(1:正常 2:强制失效 3:结束 4:删除) + DistributionObject int `json:"distribution_object"` // 发放对象(1:全部用户 2:新注册用户 3:会员 4:近期消费 5:近期购药 6:存量用户 7:健康包服务用户) + ApplicationScope int `json:"application_scope"` // 适用范围(1:全场通用 2:问诊 3:按品牌适用 4:按类别适用 5:单品使用 6:全品类药品) + InquiryType []string `json:"inquiry_type"` // 关联问诊类型,application_scope=问诊时存在生效,逗号分隔(1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药 6:检测) + BrandId string `json:"brand_id"` // 关联品牌id(如不限制品牌,此项为空) + IsMutex int `json:"is_mutex"` // 是否互斥(0:否 1:是)互斥情况下无法和其他优惠卷同时使用 + IsDisplay int `json:"is_display"` // 是否展示(0:否 1:是) + DistributionWithDay *int `json:"distribution_with_day"` // 发放关联天数(发放对象为近期消费等类型时规定天数) + MinUsableNumber int `json:"min_usable_number"` // 单商品最小可使用数量(默认为1,类型为数量时使用,如需限制优惠卷使用数量,请填写此处) + CouponCount int `json:"coupon_count"` // 发放数量 + CouponTakeCount int `json:"coupon_take_count"` // 已领取数量 + CouponUsedCount int `json:"coupon_used_count"` // 已使用数量 + CouponPrice float64 `json:"coupon_price"` // 优惠卷金额 + WithAmount float64 `json:"with_amount"` // 符合满减标准金额(优惠卷类型为满减时使用) + ValidType int `json:"valid_type"` // 有效类型(1:绝对时效,xxx-xxx时间段有效 2:相对时效 n天内有效) + ValidDays int `json:"valid_days"` // 自领取之日起有效天数 + ValidStartTime *model.LocalTime `json:"valid_start_time"` // 开始使用时间 + ValidEndTime *model.LocalTime `json:"valid_end_time"` // 结束使用时间 + ProductId string `json:"product_id"` // 关联商品id,逗号分隔,指定商品时,填入此项。 + ReissueIntervalDays int `json:"reissue_interval_days"` // 确认收货后的再次发放间隔天数(如果设置为 0,则表示不再次发放。当适用范围为商品时生效) + IsReissuableAfterExpire int `json:"is_reissuable_after_expire"` // 过期之后是否允许再次发放(0:否 1:是) + IsPopup int `json:"is_popup"` // 是否首页弹窗(0:否 1:是) + CouponDesc string `json:"coupon_desc"` // 优惠卷描述 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 + CouponGrant []*CouponGrantDto `json:"coupon_grant"` // 发放记录 +} + +// GetCouponDto 优惠卷详情 +func GetCouponDto(m *model.Coupon) *CouponDto { + return &CouponDto{ + CouponId: fmt.Sprintf("%d", m.CouponId), + CouponName: m.CouponName, + CouponIcon: utils.AddOssDomain(m.CouponIcon), + CouponClient: m.CouponClient, + CouponType: m.CouponType, + CouponStatus: m.CouponStatus, + DistributionObject: m.DistributionObject, + ApplicationScope: m.ApplicationScope, + BrandId: fmt.Sprintf("%d", m.BrandId), + IsMutex: *m.IsMutex, + IsDisplay: m.IsDisplay, + DistributionWithDay: &m.DistributionWithDay, + MinUsableNumber: *m.MinUsableNumber, + CouponCount: m.CouponCount, + CouponTakeCount: m.CouponTakeCount, + CouponUsedCount: m.CouponUsedCount, + CouponPrice: m.CouponPrice, + WithAmount: m.WithAmount, + ValidType: m.ValidType, + ValidDays: m.ValidDays, + ValidStartTime: m.ValidStartTime, + ValidEndTime: m.ValidEndTime, + ProductId: m.ProductId, + ReissueIntervalDays: m.ReissueIntervalDays, + IsReissuableAfterExpire: m.IsReissuableAfterExpire, + IsPopup: m.IsPopup, + CouponDesc: m.CouponDesc, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +// GetCouponListDto 优惠卷列表 +func GetCouponListDto(m []*model.Coupon) []*CouponDto { + // 处理返回值 + responses := make([]*CouponDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &CouponDto{ + CouponId: fmt.Sprintf("%d", v.CouponId), + CouponName: v.CouponName, + CouponIcon: utils.AddOssDomain(v.CouponIcon), + CouponClient: v.CouponClient, + CouponType: v.CouponType, + CouponStatus: v.CouponStatus, + DistributionObject: v.DistributionObject, + ApplicationScope: v.ApplicationScope, + BrandId: fmt.Sprintf("%d", v.BrandId), + IsMutex: *v.IsMutex, + IsDisplay: v.IsDisplay, + DistributionWithDay: &v.DistributionWithDay, + MinUsableNumber: *v.MinUsableNumber, + CouponCount: v.CouponCount, + CouponTakeCount: v.CouponTakeCount, + CouponUsedCount: v.CouponUsedCount, + CouponPrice: v.CouponPrice, + WithAmount: v.WithAmount, + ValidType: v.ValidType, + ValidDays: v.ValidDays, + ValidStartTime: v.ValidStartTime, + ValidEndTime: v.ValidEndTime, + ProductId: v.ProductId, + ReissueIntervalDays: v.ReissueIntervalDays, + IsReissuableAfterExpire: v.IsReissuableAfterExpire, + IsPopup: v.IsPopup, + CouponDesc: v.CouponDesc, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 加载关联问诊类型 + if v.InquiryType != "" { + response.LoadInquiryType(v.InquiryType) + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + +// LoadCouponGrant 加载发放优惠卷数据 +func (r *CouponDto) LoadCouponGrant(m []*model.CouponGrant) *CouponDto { + if len(m) > 0 { + d := GetCouponGrantListDto(m) + + r.CouponGrant = d + } + return r +} + +// LoadInquiryType 加载关联问诊类型 +func (r *CouponDto) LoadInquiryType(m string) *CouponDto { + if m != "" { + inquiryType := strings.Split(m, ",") + + r.InquiryType = inquiryType + } + return r +} diff --git a/api/model/coupon.go b/api/model/coupon.go new file mode 100644 index 0000000..c183b89 --- /dev/null +++ b/api/model/coupon.go @@ -0,0 +1,59 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// Coupon 优惠卷表 +type Coupon struct { + CouponId int64 `gorm:"column:coupon_id;type:bigint(19);primary_key;comment:主键id" json:"coupon_id"` + CouponName string `gorm:"column:coupon_name;type:varchar(255);comment:优惠卷名称" json:"coupon_name"` + CouponIcon string `gorm:"column:coupon_icon;type:varchar(255);comment:优惠卷图片" json:"coupon_icon"` + CouponClient int `gorm:"column:coupon_client;type:tinyint(1);comment:使用平台(1:小程序);NOT NULL" json:"coupon_client"` + CouponType int `gorm:"column:coupon_type;type:tinyint(1);comment:优惠卷类型(1:无门槛 2:满减 3:数量);NOT NULL" json:"coupon_type"` + CouponStatus int `gorm:"column:coupon_status;type:tinyint(1);default:1;comment:状态(1:正常 2:强制失效 3:结束 4:删除)" json:"coupon_status"` + DistributionObject int `gorm:"column:distribution_object;type:tinyint(1);default:1;comment:发放对象(1:全部用户 2:新注册用户 3:会员 4:近期消费 5:近期购药 6:存量用户 7:健康包服务用户)" json:"distribution_object"` + ApplicationScope int `gorm:"column:application_scope;type:tinyint(1);default:1;comment:适用范围(1:全场通用 2:问诊 3:按品牌适用 4:按类别适用 5:单品使用 6:全品类药品)" json:"application_scope"` + InquiryType string `gorm:"column:inquiry_type;type:varchar(100);comment:关联问诊类型,application_scope=问诊时存在生效,逗号分隔(1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药 6:检测)" json:"inquiry_type"` + BrandId *int64 `gorm:"column:brand_id;type:bigint(19);comment:关联品牌id(如不限制品牌,此项为空)" json:"brand_id"` + IsMutex *int `gorm:"column:is_mutex;type:tinyint(1);default:1;comment:是否互斥(0:否 1:是)互斥情况下无法和其他优惠卷同时使用" json:"is_mutex"` + IsDisplay int `gorm:"column:is_display;type:tinyint(1);comment:是否展示(0:否 1:是)" json:"is_display"` + DistributionWithDay int `gorm:"column:distribution_with_day;type:int(11);default:0;comment:发放关联天数(发放对象为近期消费等类型时规定天数)" json:"distribution_with_day"` + MinUsableNumber *int `gorm:"column:min_usable_number;type:int(11);default:1;comment:单商品最小可使用数量(默认为1,类型为数量时使用,如需限制优惠卷使用数量,请填写此处)" json:"min_usable_number"` + CouponCount int `gorm:"column:coupon_count;type:int(10);default:0;comment:发放数量" json:"coupon_count"` + CouponTakeCount int `gorm:"column:coupon_take_count;type:int(10);default:0;comment:已领取数量" json:"coupon_take_count"` + CouponUsedCount int `gorm:"column:coupon_used_count;type:int(10);default:0;comment:已使用数量" json:"coupon_used_count"` + CouponPrice float64 `gorm:"column:coupon_price;type:decimal(10,2);default:0.00;comment:优惠卷金额" json:"coupon_price"` + WithAmount float64 `gorm:"column:with_amount;type:decimal(10,2);default:0.00;comment:符合满减标准金额(优惠卷类型为满减时使用)" json:"with_amount"` + ValidType int `gorm:"column:valid_type;type:tinyint(4);comment:有效类型(1:绝对时效,xxx-xxx时间段有效 2:相对时效 n天内有效);NOT NULL" json:"valid_type"` + ValidDays int `gorm:"column:valid_days;type:int(3);comment:自领取之日起有效天数" json:"valid_days"` + ValidStartTime *LocalTime `gorm:"column:valid_start_time;type:datetime;comment:开始使用时间" json:"valid_start_time"` + ValidEndTime *LocalTime `gorm:"column:valid_end_time;type:datetime;comment:结束使用时间" json:"valid_end_time"` + ProductId string `gorm:"column:product_id;type:text;comment:关联商品id,逗号分隔,指定商品时,填入此项。" json:"product_id"` + ReissueIntervalDays int `gorm:"column:reissue_interval_days;type:int(5);default:0;comment:确认收货后的再次发放间隔天数(如果设置为 0,则表示不再次发放。当适用范围为商品时生效)" json:"reissue_interval_days"` + IsReissuableAfterExpire int `gorm:"column:is_reissuable_after_expire;type:tinyint(1);default:0;comment:过期之后是否允许再次发放(0:否 1:是)" json:"is_reissuable_after_expire"` + IsPopup int `gorm:"column:is_popup;type:tinyint(1);default:0;comment:是否首页弹窗(0:否 1:是)" json:"is_popup"` + CouponDesc string `gorm:"column:coupon_desc;type:text;comment:优惠卷描述" json:"coupon_desc"` + Model + CouponGrant []*CouponGrant `gorm:"foreignKey:CouponId;references:coupon_id" json:"coupon_grant"` // 优惠卷发放记录 +} + +func (m *Coupon) TableName() string { + return "gdxz_coupon" +} + +func (m *Coupon) BeforeCreate(tx *gorm.DB) error { + if m.CouponId == 0 { + m.CouponId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/couponGrant.go b/api/model/couponGrant.go new file mode 100644 index 0000000..1867750 --- /dev/null +++ b/api/model/couponGrant.go @@ -0,0 +1,40 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// CouponGrant 优惠卷发放记录表 +type CouponGrant struct { + GrantId int64 `gorm:"column:grant_id;type:bigint(19);primary_key;comment:主键id" json:"grant_id"` + CouponId int64 `gorm:"column:coupon_id;type:bigint(19);comment:优惠卷id" json:"coupon_id"` + GrantType int `gorm:"column:grant_type;type:tinyint(1);default:1;comment:发放类型(1:具体用户 2:未拥有用户)" json:"grant_type"` + UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id(发放类型为具体用户时存在)" json:"user_id"` + TotalQuantity int `gorm:"column:total_quantity;type:int(5);default:0;comment:目标发放数量" json:"total_quantity"` + GrantQuantity int `gorm:"column:grant_quantity;type:int(5);comment:已发放数量" json:"grant_quantity"` + GrantResult int `gorm:"column:grant_result;type:tinyint(1);default:2;comment:发放结果(1:成功 2:发放中 3:部分 4:失败)" json:"grant_result"` + StopReason string `gorm:"column:stop_reason;type:varchar(255);comment:停止原因" json:"stop_reason"` + AdminUserId int64 `gorm:"column:admin_user_id;type:bigint(19);comment:后台操作用户id" json:"admin_user_id"` + Model + User *User `gorm:"foreignKey:UserId;references:user_id" json:"user"` // 用户 +} + +func (m *CouponGrant) TableName() string { + return "gdxz_coupon_grant" +} + +func (m *CouponGrant) BeforeCreate(tx *gorm.DB) error { + if m.GrantId == 0 { + m.GrantId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/doctorConfigDifficultConsultation.go b/api/model/doctorConfigDifficultConsultation.go new file mode 100644 index 0000000..e0cdd48 --- /dev/null +++ b/api/model/doctorConfigDifficultConsultation.go @@ -0,0 +1,36 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// DoctorConfigDifficultConsultation 医生配置-疑难会诊 +type DoctorConfigDifficultConsultation struct { + DifficultConsultationId int64 `gorm:"column:difficult_consultation_id;type:bigint(19);primary_key;comment:主键id" json:"difficult_consultation_id"` + DoctorId int64 `gorm:"column:doctor_id;type:bigint(19);comment:医生id;NOT NULL" json:"doctor_id"` + ServiceContent string `gorm:"column:service_content;type:text;comment:服务内容" json:"service_content"` + ServiceProcess string `gorm:"column:service_process;type:text;comment:服务流程" json:"service_process"` + ServicePeriod uint `gorm:"column:service_period;type:int(10) unsigned;comment:服务周期;NOT NULL" json:"service_period"` + ServiceRounds uint `gorm:"column:service_rounds;type:int(1) unsigned;default:0;comment:服务回合数(0表示不限次)" json:"service_rounds"` + Model +} + +func (m *DoctorConfigDifficultConsultation) TableName() string { + return "gdxz_doctor_config_difficult_consultation" +} + +func (m *DoctorConfigDifficultConsultation) BeforeCreate(tx *gorm.DB) error { + if m.DifficultConsultationId == 0 { + m.DifficultConsultationId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/doctorConfigFollowPackage.go b/api/model/doctorConfigFollowPackage.go new file mode 100644 index 0000000..d5d9ec6 --- /dev/null +++ b/api/model/doctorConfigFollowPackage.go @@ -0,0 +1,36 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// DoctorConfigFollowPackage 医生配置-随访包 +type DoctorConfigFollowPackage struct { + FollowPackageId int64 `gorm:"column:follow_package_id;type:bigint(19);primary_key;comment:主键id" json:"follow_package_id"` + DoctorId int64 `gorm:"column:doctor_id;type:bigint(19);comment:医生id" json:"doctor_id"` + MonthlyFrequency int `gorm:"column:monthly_frequency;type:int(1);default:0;comment:每月次数(0表示不限次)" json:"monthly_frequency"` + ServiceRounds int `gorm:"column:service_rounds;type:int(1);default:0;comment:服务回合数(0表示不限次)" json:"service_rounds"` + Model + UserDoctor *UserDoctor `gorm:"foreignKey:DoctorId;references:doctor_id" json:"user_doctor"` // 医生 + DoctorConfigFollowPackageItem []*DoctorConfigFollowPackageItem `gorm:"foreignKey:FollowPackageId;references:follow_package_id" json:"doctor_config_follow_package_item"` // 明细 +} + +func (m *DoctorConfigFollowPackage) TableName() string { + return "gdxz_doctor_config_follow_package" +} + +func (m *DoctorConfigFollowPackage) BeforeCreate(tx *gorm.DB) error { + if m.FollowPackageId == 0 { + m.FollowPackageId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/doctorConfigFollowPackageItem.go b/api/model/doctorConfigFollowPackageItem.go new file mode 100644 index 0000000..73f9ea4 --- /dev/null +++ b/api/model/doctorConfigFollowPackageItem.go @@ -0,0 +1,34 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// DoctorConfigFollowPackageItem 医生配置-随访包-明细 +type DoctorConfigFollowPackageItem struct { + FollowPackageItemId int64 `gorm:"column:follow_package_item_id;type:bigint(19);primary_key;comment:主键id" json:"follow_package_item_id"` + FollowPackageId int64 `gorm:"column:follow_package_id;type:bigint(19);comment:医生随访包id;NOT NULL" json:"follow_package_id"` + ServicePeriod int `gorm:"column:service_period;type:int(5);comment:服务周期(天)" json:"service_period"` + ServicePrice float64 `gorm:"column:service_price;type:decimal(10,2);comment:服务价格" json:"service_price"` + Model +} + +func (m *DoctorConfigFollowPackageItem) TableName() string { + return "gdxz_doctor_config_follow_package_item" +} + +func (m *DoctorConfigFollowPackageItem) BeforeCreate(tx *gorm.DB) error { + if m.FollowPackageItemId == 0 { + m.FollowPackageItemId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/doctorConfigHealthPackage.go b/api/model/doctorConfigHealthPackage.go new file mode 100644 index 0000000..bcbf840 --- /dev/null +++ b/api/model/doctorConfigHealthPackage.go @@ -0,0 +1,36 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// DoctorConfigHealthPackage 医生配置-健康包 +type DoctorConfigHealthPackage struct { + HealthPackageId int64 `gorm:"column:health_package_id;type:bigint(19);primary_key;comment:主键id" json:"health_package_id"` + DoctorId int64 `gorm:"column:doctor_id;type:bigint(19);comment:医生id;NOT NULL" json:"doctor_id"` + PackageId int64 `gorm:"column:package_id;type:bigint(19);comment:健康包配置id;NOT NULL" json:"package_id"` + ServicePrice float64 `gorm:"column:service_price;type:decimal(10,2);comment:服务价格(根据图文问诊价格计算)" json:"service_price"` + Model + UserDoctor *UserDoctor `gorm:"foreignKey:DoctorId;references:doctor_id" json:"user_doctor"` // 医生 + HealthPackage *HealthPackage `gorm:"foreignKey:PackageId;references:package_id" json:"health_package"` +} + +func (m *DoctorConfigHealthPackage) TableName() string { + return "gdxz_doctor_config_health_package" +} + +func (m *DoctorConfigHealthPackage) BeforeCreate(tx *gorm.DB) error { + if m.HealthPackageId == 0 { + m.HealthPackageId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/doctorInquiryConfig.go b/api/model/doctorInquiryConfig.go index 22ac040..75042d5 100644 --- a/api/model/doctorInquiryConfig.go +++ b/api/model/doctorInquiryConfig.go @@ -15,7 +15,7 @@ type DoctorInquiryConfig struct { IsEnable int `gorm:"column:is_enable;type:tinyint(1);default:0;comment:是否启用(0:否 1:是)" json:"is_enable"` LastEnableMethod int `gorm:"column:last_enable_method;type:tinyint(1);default:1;comment:最后开启方式(1:自己 2:后台)" json:"last_enable_method"` WorkNumDay int `gorm:"column:work_num_day;type:int(10);default:0;comment:每日接诊数量" json:"work_num_day"` - InquiryPrice float64 `gorm:"column:inquiry_price;type:decimal(10,2);comment:接诊价格(专家问诊-公益问诊)" json:"inquiry_price"` + InquiryPrice *float64 `gorm:"column:inquiry_price;type:decimal(10,2);comment:接诊价格(专家问诊-公益问诊)" json:"inquiry_price"` UserDoctor *UserDoctor `gorm:"foreignKey:DoctorId;references:doctor_id" json:"user_doctor"` // 医生 Model } diff --git a/api/model/healthPackage.go b/api/model/healthPackage.go new file mode 100644 index 0000000..52a8a40 --- /dev/null +++ b/api/model/healthPackage.go @@ -0,0 +1,37 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// HealthPackage 健康包 +type HealthPackage struct { + PackageId int64 `gorm:"column:package_id;type:bigint(20);primary_key;comment:主键id" json:"package_id"` + ServiceCount int `gorm:"column:service_count;type:int(1);comment:总服务次数" json:"service_count"` + MonthlyFrequency int `gorm:"column:monthly_frequency;type:int(1);comment:每月次数" json:"monthly_frequency"` + EffectiveDays string `gorm:"column:effective_days;type:varchar(20);comment:服务有效天数" json:"effective_days"` + ServiceRate string `gorm:"column:service_rate;type:varchar(20);comment:服务费率。100为满值,表示1,正常费率。" json:"service_rate"` + DiscountProductTotalAmount float64 `gorm:"column:discount_product_total_amount;type:decimal(10,2) unsigned;default:0.00;comment:折扣商品总价格" json:"discount_product_total_amount"` + Model + HealthPackageProduct []*HealthPackageProduct `gorm:"foreignKey:PackageId;references:package_id" json:"health_package_product"` // 健康包-关联商品 +} + +func (m *HealthPackage) TableName() string { + return "gdxz_health_package" +} + +func (m *HealthPackage) BeforeCreate(tx *gorm.DB) error { + if m.PackageId == 0 { + m.PackageId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/healthPackageProduct.go b/api/model/healthPackageProduct.go new file mode 100644 index 0000000..08f7758 --- /dev/null +++ b/api/model/healthPackageProduct.go @@ -0,0 +1,36 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// HealthPackageProduct 健康包-关联商品 +type HealthPackageProduct struct { + PackageProductId int64 `gorm:"column:package_product_id;type:bigint(19);comment:主键id" json:"package_product_id"` + PackageId int64 `gorm:"column:package_id;type:bigint(19);comment:健康包id" json:"package_id"` + ProductId int64 `gorm:"column:product_id;type:bigint(19);primary_key;comment:商品id" json:"product_id"` + ProductName string `gorm:"column:product_name;type:varchar(255);comment:商品名称" json:"product_name"` + Quantity int `gorm:"column:quantity;type:int(1);default:1;comment:数量" json:"quantity"` + DiscountProductPrice float64 `gorm:"column:discount_product_price;type:decimal(10,2) unsigned;default:0.00;comment:折扣商品价格" json:"discount_product_price"` + Model +} + +func (m *HealthPackageProduct) TableName() string { + return "gdxz_health_package_product" +} + +func (m *HealthPackageProduct) BeforeCreate(tx *gorm.DB) error { + if m.PackageProductId == 0 { + m.PackageProductId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/order.go b/api/model/order.go new file mode 100644 index 0000000..8c4b5a5 --- /dev/null +++ b/api/model/order.go @@ -0,0 +1,51 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// Order 订单表 +type Order struct { + OrderId int64 `gorm:"column:order_id;type:bigint(19);primary_key;comment:主键id" json:"order_id"` + UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id-患者;NOT NULL" json:"user_id"` + PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id;NOT NULL" json:"patient_id"` + DoctorId int64 `gorm:"column:doctor_id;type:bigint(19);comment:医生id(存在为null的情况)" json:"doctor_id"` + OrderType int `gorm:"column:order_type;type:tinyint(1);comment:订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单);NOT NULL" json:"order_type"` + IsDelete int `gorm:"column:is_delete;type:tinyint(1);default:0;comment:删除状态(0:否 1:是)" json:"is_delete"` + PayChannel int `gorm:"column:pay_channel;type:tinyint(1);default:1;comment:支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付);NOT NULL" json:"pay_channel"` + PayStatus int `gorm:"column:pay_status;type:tinyint(1);default:1;comment:支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款);NOT NULL" json:"pay_status"` + PayTime LocalTime `gorm:"column:pay_time;type:datetime;comment:支付时间" json:"pay_time"` + RefundStatus int `gorm:"column:refund_status;type:tinyint(1);default:0;comment:订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款);NOT NULL" json:"refund_status"` + OrderNo string `gorm:"column:order_no;type:varchar(30);comment:系统订单编号;NOT NULL" json:"order_no"` + EscrowTradeNo string `gorm:"column:escrow_trade_no;type:varchar(100);comment:第三方支付流水号" json:"escrow_trade_no"` + AmountTotal float64 `gorm:"column:amount_total;type:decimal(10,2) unsigned;default:0.00;comment:订单金额" json:"amount_total"` + CouponAmountTotal float64 `gorm:"column:coupon_amount_total;type:decimal(10,2) unsigned;default:0.00;comment:优惠卷总金额" json:"coupon_amount_total"` + PaymentAmountTotal float64 `gorm:"column:payment_amount_total;type:decimal(10,2) unsigned;default:0.00;comment:实际付款金额" json:"payment_amount_total"` + CancelStatus int `gorm:"column:cancel_status;type:tinyint(1);default:0;comment:取消状态(0:否 1:是)" json:"cancel_status"` + CancelTime LocalTime `gorm:"column:cancel_time;type:datetime;comment:订单取消时间" json:"cancel_time"` + CancelRemarks string `gorm:"column:cancel_remarks;type:varchar(255);comment:取消订单备注" json:"cancel_remarks"` + OrderRemarks string `gorm:"column:order_remarks;type:varchar(255);comment:订单备注" json:"order_remarks"` + IsWithdrawal int `gorm:"column:is_withdrawal;type:tinyint(1);default:0;comment:是否提现(0:否 1:是 2:提现中 3:无需提现)" json:"is_withdrawal"` + WithdrawalTime LocalTime `gorm:"column:withdrawal_time;type:datetime;comment:提现时间" json:"withdrawal_time"` + Model +} + +func (m *Order) TableName() string { + return "gdxz_order" +} + +func (m *Order) BeforeCreate(tx *gorm.DB) error { + if m.OrderId == 0 { + m.OrderId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/orderCoupon.go b/api/model/orderCoupon.go new file mode 100644 index 0000000..d239c19 --- /dev/null +++ b/api/model/orderCoupon.go @@ -0,0 +1,34 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +type OrderCoupon struct { + OrderCouponId int64 `gorm:"column:order_coupon_id;type:bigint(19);primary_key;comment:主键id" json:"order_coupon_id"` + OrderId int64 `gorm:"column:order_id;type:bigint(19);comment:订单id;NOT NULL" json:"order_id"` + UserCouponId int64 `gorm:"column:user_coupon_id;type:bigint(19);comment:用户优惠卷表id;NOT NULL" json:"user_coupon_id"` + CouponName string `gorm:"column:coupon_name;type:varchar(255);comment:优惠卷名称" json:"coupon_name"` + CouponUsePrice float64 `gorm:"column:coupon_use_price;type:decimal(10,2);default:0.00;comment:优惠卷使用金额" json:"coupon_use_price"` + Model +} + +func (m *OrderCoupon) TableName() string { + return "gdxz_order_coupon" +} + +func (m *OrderCoupon) BeforeCreate(tx *gorm.DB) error { + if m.OrderCouponId == 0 { + m.OrderCouponId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/orderInquiry.go b/api/model/orderInquiry.go index 0b69dc9..5d4f45f 100644 --- a/api/model/orderInquiry.go +++ b/api/model/orderInquiry.go @@ -9,6 +9,7 @@ import ( // OrderInquiry 订单-问诊表 type OrderInquiry struct { OrderInquiryId int64 `gorm:"column:order_inquiry_id;type:bigint(19);primary_key;comment:主键id" json:"order_inquiry_id"` + OrderId int64 `gorm:"column:order_id;type:bigint(19);comment:订单id" json:"order_id"` UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id-患者;NOT NULL" json:"user_id"` PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id;NOT NULL" json:"patient_id"` DoctorId int64 `gorm:"column:doctor_id;type:bigint(19);comment:医生id(未分配时为null)" json:"doctor_id"` diff --git a/api/model/orderPrescriptionFile.go b/api/model/orderPrescriptionFile.go new file mode 100644 index 0000000..fbba182 --- /dev/null +++ b/api/model/orderPrescriptionFile.go @@ -0,0 +1,37 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// OrderPrescriptionFile 订单-处方表-ca处方文件 +type OrderPrescriptionFile struct { + PrescriptionFileId int64 `gorm:"column:prescription_file_id;type:bigint(19);primary_key;comment:主键id" json:"prescription_file_id"` + OrderPrescriptionId int64 `gorm:"column:order_prescription_id;type:bigint(19);comment:订单-处方id" json:"order_prescription_id"` + DoctorCaFileId string `gorm:"column:doctor_ca_file_id;type:varchar(100);comment:医生签章pdf文件id(可请求ca下载)" json:"doctor_ca_file_id"` + HospitalCaFileId string `gorm:"column:hospital_ca_file_id;type:varchar(100);comment:医院签章pdf文件id(可请求ca下载)" json:"hospital_ca_file_id"` + PrescriptionImgOssPath string `gorm:"column:prescription_img_oss_path;type:varchar(255);comment:签章img文件oss路径" json:"prescription_img_oss_path"` + PrescriptionPdfOssPath string `gorm:"column:prescription_pdf_oss_path;type:varchar(255);comment:签章pdf文件oss路径" json:"prescription_pdf_oss_path"` + IsConvertedPdf int `gorm:"column:is_converted_pdf;type:tinyint(1);default:0;comment:是否已转换pdf为图片(0:否 1:是)" json:"is_converted_pdf"` + Model +} + +func (m *OrderPrescriptionFile) TableName() string { + return "gdxz_order_prescription_file" +} + +func (m *OrderPrescriptionFile) BeforeCreate(tx *gorm.DB) error { + if m.PrescriptionFileId == 0 { + m.PrescriptionFileId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/orderProduct.go b/api/model/orderProduct.go index 20f753c..836f1e8 100644 --- a/api/model/orderProduct.go +++ b/api/model/orderProduct.go @@ -8,50 +8,53 @@ import ( // OrderProduct 订单-商品订单表 type OrderProduct struct { - OrderProductId int64 `gorm:"column:order_product_id;type:bigint(20);primary_key;comment:主键id" json:"order_product_id"` - OrderInquiryId int64 `gorm:"column:order_inquiry_id;type:bigint(19);comment:订单-问诊id;NOT NULL" json:"order_inquiry_id"` - OrderPrescriptionId int64 `gorm:"column:order_prescription_id;type:bigint(19);comment:订单-处方id;NOT NULL" json:"order_prescription_id"` - DoctorId int64 `gorm:"column:doctor_id;type:bigint(19);comment:医生id" json:"doctor_id"` - PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id" json:"patient_id"` - FamilyId int64 `gorm:"column:family_id;type:bigint(19);comment:家庭成员id(就诊用户)" json:"family_id"` - OrderProductNo string `gorm:"column:order_product_no;type:varchar(100);comment:订单编号" json:"order_product_no"` - EscrowTradeNo string `gorm:"column:escrow_trade_no;type:varchar(100);comment:第三方支付流水号" json:"escrow_trade_no"` - OrderProductStatus int `gorm:"column:order_product_status;type:tinyint(1);comment:订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消)" json:"order_product_status"` - PayChannel int `gorm:"column:pay_channel;type:tinyint(1);comment:支付渠道(1:小程序支付 2:微信扫码支付);NOT NULL" json:"pay_channel"` - PayStatus int `gorm:"column:pay_status;type:tinyint(4);default:1;comment:支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)" json:"pay_status"` - IsDelete int `gorm:"column:is_delete;type:tinyint(1);default:0;comment:删除状态(0:否 1:是)" json:"is_delete"` - CancelReason int `gorm:"column:cancel_reason;type:tinyint(1);comment:订单取消原因(1:主动取消 2:复核失败/库存不足 3:支付超时 4:客服取消)" json:"cancel_reason"` - AmountTotal float64 `gorm:"column:amount_total;type:decimal(10,2);default:0.00;comment:订单金额" json:"amount_total"` - PaymentAmountTotal float64 `gorm:"column:payment_amount_total;type:decimal(10,2);default:0.00;comment:实际付款金额" json:"payment_amount_total"` - LogisticsFee float64 `gorm:"column:logistics_fee;type:decimal(10,2);default:0.00;comment:运费金额" json:"logistics_fee"` - LogisticsNo string `gorm:"column:logistics_no;type:varchar(100);comment:物流编号" json:"logistics_no"` - LogisticsCompanyCode string `gorm:"column:logistics_company_code;type:varchar(255);comment:快递公司编码" json:"logistics_company_code"` - SubLogisticsStatus int `gorm:"column:sub_logistics_status;type:tinyint(1);default:0;comment:快递推送订阅状态(0:未订阅/无需订阅 1:已订阅 2:订阅失败)" json:"sub_logistics_status"` - DeliveryTime LocalTime `gorm:"column:delivery_time;type:datetime;comment:发货时间" json:"delivery_time"` - PayTime LocalTime `gorm:"column:pay_time;type:datetime;comment:支付时间" json:"pay_time"` - Remarks string `gorm:"column:remarks;type:varchar(255);comment:订单备注" json:"remarks"` - RefundStatus int `gorm:"column:refund_status;type:tinyint(1);default:0;comment:商品订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常)" json:"refund_status"` - CancelTime LocalTime `gorm:"column:cancel_time;type:datetime;comment:订单取消时间" json:"cancel_time"` - CancelRemarks string `gorm:"column:cancel_remarks;type:varchar(255);comment:订单取消备注(自动添加)" json:"cancel_remarks"` - ReportPreStatus int `gorm:"column:report_pre_status;type:tinyint(1);default:0;comment:上报处方平台状态(0:未上报 1:已上报 2:上报失败))" json:"report_pre_status"` - ReportPreTime LocalTime `gorm:"column:report_pre_time;type:datetime;comment:上报处方平台时间" json:"report_pre_time"` - ReportPreFailReason string `gorm:"column:report_pre_fail_reason;type:text;comment:上报失败原因" json:"report_pre_fail_reason"` - ProvinceId int `gorm:"column:province_id;type:int(11);comment:省份id" json:"province_id"` - Province string `gorm:"column:province;type:varchar(40);comment:省份" json:"province"` - CityId int `gorm:"column:city_id;type:int(11);comment:城市id" json:"city_id"` - City string `gorm:"column:city;type:varchar(50);comment:城市" json:"city"` - CountyId int `gorm:"column:county_id;type:int(11);comment:区县id" json:"county_id"` - County string `gorm:"column:county;type:varchar(255);comment:区县" json:"county"` - Address string `gorm:"column:address;type:varchar(255);comment:详细地址" json:"address"` - AddressMask string `gorm:"column:address_mask;type:varchar(255);comment:详细地址(掩码)" json:"address_mask"` - ConsigneeName string `gorm:"column:consignee_name;type:varchar(150);comment:收货人姓名" json:"consignee_name"` - ConsigneeNameMask string `gorm:"column:consignee_name_mask;type:varchar(150);comment:收货人姓名(掩码)" json:"consignee_name_mask"` - ConsigneeTel string `gorm:"column:consignee_tel;type:varchar(50);comment:收货人电话" json:"consignee_tel"` - ConsigneeTelMask string `gorm:"column:consignee_tel_mask;type:varchar(50);comment:收货人电话(掩码)" json:"consignee_tel_mask"` - UserDoctor *UserDoctor `gorm:"foreignKey:DoctorId;references:doctor_id" json:"user_doctor"` // 医生 - OrderInquiry *OrderInquiry `gorm:"foreignKey:OrderInquiryId;references:order_inquiry_id" json:"order_inquiry"` // 问诊 - UserPatient *UserPatient `gorm:"foreignKey:PatientId;references:patient_id" json:"user_patient"` // 患者 - OrderPrescription *OrderPrescription `gorm:"foreignKey:OrderPrescriptionId;references:order_prescription_id" json:"order_prescription"` // 处方 + OrderProductId int64 `gorm:"column:order_product_id;type:bigint(20);primary_key;comment:主键id" json:"order_product_id"` + OrderInquiryId int64 `gorm:"column:order_inquiry_id;type:bigint(19);comment:订单-问诊id;NOT NULL" json:"order_inquiry_id"` + OrderPrescriptionId int64 `gorm:"column:order_prescription_id;type:bigint(19);comment:订单-处方id;NOT NULL" json:"order_prescription_id"` + OrderId int64 `gorm:"column:order_id;type:bigint(19);comment:订单id" json:"order_id"` + DoctorId int64 `gorm:"column:doctor_id;type:bigint(19);comment:医生id" json:"doctor_id"` + PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id" json:"patient_id"` + FamilyId int64 `gorm:"column:family_id;type:bigint(19);comment:家庭成员id(就诊用户)" json:"family_id"` + OrderProductNo string `gorm:"column:order_product_no;type:varchar(100);comment:订单编号" json:"order_product_no"` + EscrowTradeNo string `gorm:"column:escrow_trade_no;type:varchar(100);comment:第三方支付流水号" json:"escrow_trade_no"` + OrderProductStatus int `gorm:"column:order_product_status;type:tinyint(1);comment:订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消)" json:"order_product_status"` + PayChannel int `gorm:"column:pay_channel;type:tinyint(1);comment:支付渠道(1:小程序支付 2:微信扫码支付);NOT NULL" json:"pay_channel"` + PayStatus int `gorm:"column:pay_status;type:tinyint(4);default:1;comment:支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)" json:"pay_status"` + IsDelete int `gorm:"column:is_delete;type:tinyint(1);default:0;comment:删除状态(0:否 1:是)" json:"is_delete"` + CancelReason int `gorm:"column:cancel_reason;type:tinyint(1);comment:订单取消原因(1:主动取消 2:复核失败/库存不足 3:支付超时 4:客服取消)" json:"cancel_reason"` + AmountTotal float64 `gorm:"column:amount_total;type:decimal(10,2);default:0.00;comment:订单金额" json:"amount_total"` + CouponAmountTotal float64 `gorm:"column:coupon_amount_total;type:decimal(10,2);default:0.00;comment:优惠卷总金额" json:"coupon_amount_total"` + PaymentAmountTotal float64 `gorm:"column:payment_amount_total;type:decimal(10,2);default:0.00;comment:实际付款金额" json:"payment_amount_total"` + LogisticsFee float64 `gorm:"column:logistics_fee;type:decimal(10,2);default:0.00;comment:运费金额" json:"logistics_fee"` + LogisticsNo string `gorm:"column:logistics_no;type:varchar(100);comment:物流编号" json:"logistics_no"` + LogisticsCompanyCode string `gorm:"column:logistics_company_code;type:varchar(255);comment:快递公司编码" json:"logistics_company_code"` + SubLogisticsStatus int `gorm:"column:sub_logistics_status;type:tinyint(1);default:0;comment:快递推送订阅状态(0:未订阅/无需订阅 1:已订阅 2:订阅失败)" json:"sub_logistics_status"` + DeliveryTime LocalTime `gorm:"column:delivery_time;type:datetime;comment:发货时间" json:"delivery_time"` + PayTime LocalTime `gorm:"column:pay_time;type:datetime;comment:支付时间" json:"pay_time"` + Remarks string `gorm:"column:remarks;type:varchar(255);comment:订单备注" json:"remarks"` + RefundStatus int `gorm:"column:refund_status;type:tinyint(1);default:0;comment:商品订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常)" json:"refund_status"` + CancelTime LocalTime `gorm:"column:cancel_time;type:datetime;comment:订单取消时间" json:"cancel_time"` + CancelRemarks string `gorm:"column:cancel_remarks;type:varchar(255);comment:订单取消备注(自动添加)" json:"cancel_remarks"` + ReportPreStatus int `gorm:"column:report_pre_status;type:tinyint(1);default:0;comment:上报处方平台状态(0:未上报 1:已上报 2:上报失败))" json:"report_pre_status"` + ReportPreTime LocalTime `gorm:"column:report_pre_time;type:datetime;comment:上报处方平台时间" json:"report_pre_time"` + ReportPreFailReason string `gorm:"column:report_pre_fail_reason;type:text;comment:上报失败原因" json:"report_pre_fail_reason"` + ProvinceId int `gorm:"column:province_id;type:int(11);comment:省份id" json:"province_id"` + Province string `gorm:"column:province;type:varchar(40);comment:省份" json:"province"` + CityId int `gorm:"column:city_id;type:int(11);comment:城市id" json:"city_id"` + City string `gorm:"column:city;type:varchar(50);comment:城市" json:"city"` + CountyId int `gorm:"column:county_id;type:int(11);comment:区县id" json:"county_id"` + County string `gorm:"column:county;type:varchar(255);comment:区县" json:"county"` + Address string `gorm:"column:address;type:varchar(255);comment:详细地址" json:"address"` + AddressMask string `gorm:"column:address_mask;type:varchar(255);comment:详细地址(掩码)" json:"address_mask"` + ConsigneeName string `gorm:"column:consignee_name;type:varchar(150);comment:收货人姓名" json:"consignee_name"` + ConsigneeNameMask string `gorm:"column:consignee_name_mask;type:varchar(150);comment:收货人姓名(掩码)" json:"consignee_name_mask"` + ConsigneeTel string `gorm:"column:consignee_tel;type:varchar(50);comment:收货人电话" json:"consignee_tel"` + ConsigneeTelMask string `gorm:"column:consignee_tel_mask;type:varchar(50);comment:收货人电话(掩码)" json:"consignee_tel_mask"` + UserDoctor *UserDoctor `gorm:"foreignKey:DoctorId;references:doctor_id" json:"user_doctor"` // 医生 + OrderInquiry *OrderInquiry `gorm:"foreignKey:OrderInquiryId;references:order_inquiry_id" json:"order_inquiry"` // 问诊 + UserPatient *UserPatient `gorm:"foreignKey:PatientId;references:patient_id" json:"user_patient"` // 患者 + OrderPrescription *OrderPrescription `gorm:"foreignKey:OrderPrescriptionId;references:order_prescription_id" json:"order_prescription"` // 处方 + OrderProductItem []*OrderProductItem `gorm:"foreignKey:OrderProductId;references:order_product_id" json:"order_product_item"` // 处方 Model } diff --git a/api/model/orderProductCoupon.go b/api/model/orderProductCoupon.go new file mode 100644 index 0000000..2396132 --- /dev/null +++ b/api/model/orderProductCoupon.go @@ -0,0 +1,35 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// OrderProductCoupon 订单-商品-优惠卷表 +type OrderProductCoupon struct { + OrderCouponId int64 `gorm:"column:order_coupon_id;type:bigint(19);primary_key;comment:主键id" json:"order_coupon_id"` + OrderProductId int64 `gorm:"column:order_product_id;type:bigint(19);comment:订单-商品id" json:"order_product_id"` + UserCouponId int64 `gorm:"column:user_coupon_id;type:bigint(19);comment:用户优惠卷表id" json:"user_coupon_id"` + CouponName string `gorm:"column:coupon_name;type:varchar(255);comment:优惠卷名称" json:"coupon_name"` + CouponUsePrice float64 `gorm:"column:coupon_use_price;type:decimal(10,2);default:0.00;comment:优惠卷使用金额" json:"coupon_use_price"` + Model +} + +func (m *OrderProductCoupon) TableName() string { + return "gdxz_order_product_coupon" +} + +func (m *OrderProductCoupon) BeforeCreate(tx *gorm.DB) error { + if m.OrderCouponId == 0 { + m.OrderCouponId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/orderRefund.go b/api/model/orderRefund.go new file mode 100644 index 0000000..607954a --- /dev/null +++ b/api/model/orderRefund.go @@ -0,0 +1,40 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// OrderRefund 订单-退款表 +type OrderRefund struct { + OrderRefundId int64 `gorm:"column:order_refund_id;type:bigint(19);primary_key;comment:主键id" json:"order_refund_id"` + OrderId int64 `gorm:"column:order_id;type:bigint(19);comment:订单id;NOT NULL" json:"order_id"` + PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id" json:"patient_id"` + OrderNo string `gorm:"column:order_no;type:varchar(40);comment:系统订单编号" json:"order_no"` + RefundNo string `gorm:"column:refund_no;type:varchar(50);comment:系统退款编号;NOT NULL" json:"refund_no"` + RefundId string `gorm:"column:refund_id;type:varchar(50);comment:第三方退款单号" json:"refund_id"` + RefundStatus int `gorm:"column:refund_status;type:tinyint(1);default:0;comment:订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款)" json:"refund_status"` + RefundTotal float64 `gorm:"column:refund_total;type:decimal(10,2);default:0.00;comment:退款金额" json:"refund_total"` + RefundReason string `gorm:"column:refund_reason;type:varchar(255);comment:退款原因" json:"refund_reason"` + SuccessTime LocalTime `gorm:"column:success_time;type:datetime;comment:退款成功时间" json:"success_time"` + Model +} + +func (m *OrderRefund) TableName() string { + return "gdxz_order_refund" +} + +func (m *OrderRefund) BeforeCreate(tx *gorm.DB) error { + if m.OrderRefundId == 0 { + m.OrderRefundId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/orderServicePackage.go b/api/model/orderServicePackage.go new file mode 100644 index 0000000..b8a0119 --- /dev/null +++ b/api/model/orderServicePackage.go @@ -0,0 +1,65 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// OrderServicePackage 订单-服务包表 +type OrderServicePackage struct { + OrderServiceId int64 `gorm:"column:order_service_id;type:bigint(19);primary_key;comment:主键id" json:"order_service_id"` + OrderId int64 `gorm:"column:order_id;type:bigint(19);comment:订单id;NOT NULL" json:"order_id"` + UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id-患者;NOT NULL" json:"user_id"` + PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id;NOT NULL" json:"patient_id"` + DoctorId int64 `gorm:"column:doctor_id;type:bigint(19);comment:医生id;NOT NULL" json:"doctor_id"` + FamilyId int64 `gorm:"column:family_id;type:bigint(19);comment:家庭成员id(就诊用户);NOT NULL" json:"family_id"` + OrderServiceType int `gorm:"column:order_service_type;type:tinyint(1);comment:服务包类型(1:健康包 2:随访包);NOT NULL" json:"order_service_type"` + OrderServiceStatus int `gorm:"column:order_service_status;type:tinyint(4);comment:订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消);NOT NULL" json:"order_service_status"` + IsDelete int `gorm:"column:is_delete;type:tinyint(1);default:0;comment:删除状态(0:否 1:是)" json:"is_delete"` + RefundStatus int `gorm:"column:refund_status;type:tinyint(1);default:0;comment:订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款);NOT NULL" json:"refund_status"` + PayChannel int `gorm:"column:pay_channel;type:tinyint(1);comment:支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付);NOT NULL" json:"pay_channel"` + PayStatus int `gorm:"column:pay_status;type:tinyint(1);default:1;comment:支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款);NOT NULL" json:"pay_status"` + OrderServiceNo string `gorm:"column:order_service_no;type:varchar(30);comment:系统订单编号;NOT NULL" json:"order_service_no"` + EscrowTradeNo string `gorm:"column:escrow_trade_no;type:varchar(100);comment:第三方支付流水号;NOT NULL" json:"escrow_trade_no"` + AmountTotal float64 `gorm:"column:amount_total;type:decimal(10,2);default:0.00;comment:订单金额" json:"amount_total"` + CouponAmountTotal float64 `gorm:"column:coupon_amount_total;type:decimal(10,2);default:0.00;comment:优惠卷总金额" json:"coupon_amount_total"` + PaymentAmountTotal float64 `gorm:"column:payment_amount_total;type:decimal(10,2);default:0.00;comment:实际付款金额" json:"payment_amount_total"` + PayTime LocalTime `gorm:"column:pay_time;type:datetime;comment:支付时间" json:"pay_time"` + StartTime LocalTime `gorm:"column:start_time;type:datetime;comment:开始服务时间" json:"start_time"` + FinishTime LocalTime `gorm:"column:finish_time;type:datetime;comment:结束服务时间" json:"finish_time"` + CancelTime LocalTime `gorm:"column:cancel_time;type:datetime;comment:订单取消时间" json:"cancel_time"` + CancelReason int `gorm:"column:cancel_reason;type:tinyint(1);comment:取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时)" json:"cancel_reason"` + CancelRemarks string `gorm:"column:cancel_remarks;type:varchar(255);comment:取消订单备注" json:"cancel_remarks"` + AddFinishStatus int `gorm:"column:add_finish_status;type:tinyint(1);default:0;comment:添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败)" json:"add_finish_status"` + AddFinishTime LocalTime `gorm:"column:add_finish_time;type:datetime;comment:添加完成订单延迟队列时间" json:"add_finish_time"` + AddFinishFailReason string `gorm:"column:add_finish_fail_reason;type:varchar(255);comment:添加完成订单延迟队列失败原因" json:"add_finish_fail_reason"` + PatientName string `gorm:"column:patient_name;type:varchar(255);comment:患者姓名-就诊人" json:"patient_name"` + PatientNameMask string `gorm:"column:patient_name_mask;type:varchar(255);comment:患者姓名-就诊人(掩码)" json:"patient_name_mask"` + PatientSex int `gorm:"column:patient_sex;type:tinyint(1);default:0;comment:患者性别-就诊人(0:未知 1:男 2:女)" json:"patient_sex"` + PatientAge int `gorm:"column:patient_age;type:int(1);comment:患者年龄-就诊人" json:"patient_age"` + Model + UserDoctor *UserDoctor `gorm:"foreignKey:DoctorId;references:doctor_id" json:"user_doctor"` // 医生 + User *User `gorm:"foreignKey:UserId;references:user_id" json:"user"` // 患者 + OrderServicePackageInquiry []*OrderServicePackageInquiry `gorm:"foreignKey:OrderServiceId;references:order_service_id" json:"order_service_package_inquiry"` // 关联问诊订单 + OrderServicePackageProduct []*OrderServicePackageProduct `gorm:"foreignKey:OrderServiceId;references:order_service_id" json:"order_service_package_product"` // 关联商品订单 + UserPatient *UserPatient `gorm:"foreignKey:PatientId;references:patient_id" json:"user_patient"` +} + +func (m *OrderServicePackage) TableName() string { + return "gdxz_order_service_package" +} + +func (m *OrderServicePackage) BeforeCreate(tx *gorm.DB) error { + if m.OrderServiceId == 0 { + m.OrderServiceId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/orderServicePackageCase.go b/api/model/orderServicePackageCase.go new file mode 100644 index 0000000..ae3aea4 --- /dev/null +++ b/api/model/orderServicePackageCase.go @@ -0,0 +1,51 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +type OrderServicePackageCase struct { + OrderServiceCaseId int64 `gorm:"column:order_service_case_id;type:bigint(19);primary_key;comment:主键id" json:"order_service_case_id"` + UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id;NOT NULL" json:"user_id"` + PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id;NOT NULL" json:"patient_id"` + OrderId int64 `gorm:"column:order_id;type:bigint(19);comment:订单id;NOT NULL" json:"order_id"` + OrderServiceId int64 `gorm:"column:order_service_id;type:bigint(19);comment:订单-服务包id;NOT NULL" json:"order_service_id"` + FamilyId int64 `gorm:"column:family_id;type:bigint(19);comment:家庭成员id;NOT NULL" json:"family_id"` + DiseaseClassId int64 `gorm:"column:disease_class_id;type:bigint(19);comment:疾病分类id-系统" json:"disease_class_id"` + Relation int `gorm:"column:relation;type:tinyint(1);comment:与患者关系(1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他 )" json:"relation"` + Status int `gorm:"column:status;type:tinyint(1);default:1;comment:状态(1:正常 2:删除)" json:"status"` + Name string `gorm:"column:name;type:varchar(50);comment:患者名称" json:"name"` + Sex int `gorm:"column:sex;type:tinyint(1);default:0;comment:患者性别(0:未知 1:男 2:女)" json:"sex"` + Age int `gorm:"column:age;type:int(11);comment:患者年龄" json:"age"` + DiseaseClassName string `gorm:"column:disease_class_name;type:varchar(255);comment:疾病名称-系统" json:"disease_class_name"` + DiagnosisDate LocalTime `gorm:"column:diagnosis_date;type:datetime;comment:确诊日期" json:"diagnosis_date"` + DiseaseDesc string `gorm:"column:disease_desc;type:text;comment:病情描述(主诉)" json:"disease_desc"` + DiagnoseImages string `gorm:"column:diagnose_images;type:varchar(1000);comment:复诊凭证(多个使用逗号分隔)" json:"diagnose_images"` + IsAllergyHistory int `gorm:"column:is_allergy_history;type:tinyint(1);comment:是否存在过敏史(0:否 1:是)" json:"is_allergy_history"` + AllergyHistory string `gorm:"column:allergy_history;type:varchar(255);comment:过敏史描述" json:"allergy_history"` + IsFamilyHistory int `gorm:"column:is_family_history;type:tinyint(1);comment:是否存在家族病史(0:否 1:是)" json:"is_family_history"` + FamilyHistory string `gorm:"column:family_history;type:varchar(255);comment:家族病史描述" json:"family_history"` + IsPregnant int `gorm:"column:is_pregnant;type:tinyint(1);comment:是否备孕、妊娠、哺乳期(0:否 1:是)" json:"is_pregnant"` + Pregnant string `gorm:"column:pregnant;type:varchar(255);comment:备孕、妊娠、哺乳期描述" json:"pregnant"` + Model +} + +func (m *OrderServicePackageCase) TableName() string { + return "gdxz_order_service_package_case" +} + +func (m *OrderServicePackageCase) BeforeCreate(tx *gorm.DB) error { + if m.OrderServiceCaseId == 0 { + m.OrderServiceCaseId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/orderServicePackageDetail.go b/api/model/orderServicePackageDetail.go new file mode 100644 index 0000000..33f0d37 --- /dev/null +++ b/api/model/orderServicePackageDetail.go @@ -0,0 +1,40 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// OrderServicePackageDetail 订单-服务包详情表 +type OrderServicePackageDetail struct { + OrderServiceDetailId int64 `gorm:"column:order_service_detail_id;type:bigint(19);primary_key;comment:主键id" json:"order_service_detail_id"` + OrderServiceId int64 `gorm:"column:order_service_id;type:bigint(19);comment:服务包订单id" json:"order_service_id"` + OrderId int64 `gorm:"column:order_id;type:bigint(19);comment:订单id" json:"order_id"` + PackageId int64 `gorm:"column:package_id;type:bigint(19);comment:健康包配置id(随访包时为空)" json:"package_id"` + OrderServiceNo string `gorm:"column:order_service_no;type:varchar(30);comment:系统订单编号" json:"order_service_no"` + ServicePeriod int `gorm:"column:service_period;type:int(1);comment:服务周期(天)" json:"service_period"` + ServiceCount int `gorm:"column:service_count;type:int(1);comment:总服务次数(0表示不限次)" json:"service_count"` + MonthlyFrequency int `gorm:"column:monthly_frequency;type:int(1);comment:每月次数(0表示不限次)" json:"monthly_frequency"` + SingleInquiryPrice float64 `gorm:"column:single_inquiry_price;type:decimal(10,2);default:0.00;comment:单次图文问诊价格" json:"single_inquiry_price"` + ServicePrice float64 `gorm:"column:service_price;type:decimal(10,2);default:0.00;comment:总服务价格" json:"service_price"` + Model +} + +func (m *OrderServicePackageDetail) TableName() string { + return "gdxz_order_service_package_detail" +} + +func (m *OrderServicePackageDetail) BeforeCreate(tx *gorm.DB) error { + if m.OrderServiceDetailId == 0 { + m.OrderServiceDetailId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/orderServicePackageInquiry.go b/api/model/orderServicePackageInquiry.go new file mode 100644 index 0000000..b281f99 --- /dev/null +++ b/api/model/orderServicePackageInquiry.go @@ -0,0 +1,36 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// OrderServicePackageInquiry 服务包关联问诊订单表 +type OrderServicePackageInquiry struct { + ServiceInquiryId int64 `gorm:"column:service_inquiry_id;type:bigint(19);primary_key;comment:主键id" json:"service_inquiry_id"` + OrderServiceId int64 `gorm:"column:order_service_id;type:bigint(19);comment:订单-服务包id;NOT NULL" json:"order_service_id"` + OrderInquiryId int64 `gorm:"column:order_inquiry_id;type:bigint(19);comment:订单-问诊id;NOT NULL" json:"order_inquiry_id"` + OrderServiceNo string `gorm:"column:order_service_no;type:varchar(30);comment:服务包系统订单编号" json:"order_service_no"` + InquiryNo string `gorm:"column:inquiry_no;type:varchar(30);comment:问诊系统订单编号" json:"inquiry_no"` + Model + OrderInquiry *OrderInquiry `gorm:"foreignKey:OrderInquiryId;references:order_inquiry_id" json:"order_inquiry"` // 关联问诊订单 +} + +func (m *OrderServicePackageInquiry) TableName() string { + return "gdxz_order_service_package_inquiry" +} + +func (m *OrderServicePackageInquiry) BeforeCreate(tx *gorm.DB) error { + if m.ServiceInquiryId == 0 { + m.ServiceInquiryId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/orderServicePackageProduct.go b/api/model/orderServicePackageProduct.go new file mode 100644 index 0000000..f08e45c --- /dev/null +++ b/api/model/orderServicePackageProduct.go @@ -0,0 +1,38 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// OrderServicePackageProduct 订单-服务包-关联商品订单表 +type OrderServicePackageProduct struct { + ServiceProductId int64 `gorm:"column:service_product_id;type:bigint(19);primary_key;comment:主键id" json:"service_product_id"` + OrderServiceId int64 `gorm:"column:order_service_id;type:bigint(19);comment:订单-服务包id;NOT NULL" json:"order_service_id"` + OrderProductId int64 `gorm:"column:order_product_id;type:bigint(19);comment:订单-商品id;NOT NULL" json:"order_product_id"` + OrderProductNo string `gorm:"column:order_product_no;type:varchar(100);comment:订单-商品系统编号;NOT NULL" json:"order_product_no"` + ProductItemId int64 `gorm:"column:product_item_id;type:bigint(19);comment:订单-商品明细id;NOT NULL" json:"product_item_id"` + ProductId int64 `gorm:"column:product_id;type:bigint(19);comment:商品id;NOT NULL" json:"product_id"` + UsedQuantity int `gorm:"column:used_quantity;type:int(1);default:0;comment:商品使用数量" json:"used_quantity"` + Model + OrderProduct *OrderProduct `gorm:"foreignKey:OrderProductId;references:order_product_id" json:"order_product"` // 关联药品订单 +} + +func (m *OrderServicePackageProduct) TableName() string { + return "gdxz_order_service_package_product" +} + +func (m *OrderServicePackageProduct) BeforeCreate(tx *gorm.DB) error { + if m.ServiceProductId == 0 { + m.ServiceProductId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/orderServicePackageRefund.go b/api/model/orderServicePackageRefund.go new file mode 100644 index 0000000..d6d6d43 --- /dev/null +++ b/api/model/orderServicePackageRefund.go @@ -0,0 +1,40 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// OrderServicePackageRefund 订单-服务包-退款表 +type OrderServicePackageRefund struct { + ServiceRefundId int64 `gorm:"column:service_refund_id;type:bigint(19);primary_key;comment:主键id" json:"service_refund_id"` + PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id" json:"patient_id"` + OrderServiceId int64 `gorm:"column:order_service_id;type:bigint(19);comment:订单-服务包id" json:"order_service_id"` + OrderServiceNo string `gorm:"column:order_service_no;type:varchar(100);comment:系统订单编号" json:"order_service_no"` + ServiceRefundNo string `gorm:"column:service_refund_no;type:varchar(50);comment:系统退款编号" json:"service_refund_no"` + RefundId string `gorm:"column:refund_id;type:varchar(50);comment:第三方退款单号" json:"refund_id"` + RefundStatus int `gorm:"column:refund_status;type:tinyint(1);default:0;comment:订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款)" json:"refund_status"` + RefundTotal float64 `gorm:"column:refund_total;type:decimal(10,2);default:0.00;comment:退款金额" json:"refund_total"` + RefundReason string `gorm:"column:refund_reason;type:varchar(255);comment:退款原因" json:"refund_reason"` + SuccessTime LocalTime `gorm:"column:success_time;type:datetime;comment:退款成功时间" json:"success_time"` + Model +} + +func (m *OrderServicePackageRefund) TableName() string { + return "gdxz_order_service_package_refund" +} + +func (m *OrderServicePackageRefund) BeforeCreate(tx *gorm.DB) error { + if m.ServiceRefundId == 0 { + m.ServiceRefundId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/popup.go b/api/model/popup.go new file mode 100644 index 0000000..c6fa302 --- /dev/null +++ b/api/model/popup.go @@ -0,0 +1,40 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// Popup 弹窗表 +type Popup struct { + PopupId int64 `gorm:"column:popup_id;type:bigint(19);primary_key;comment:主键id" json:"popup_id"` + UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id" json:"user_id"` + AppType int `gorm:"column:app_type;type:tinyint(4);comment:应用程序类型(1:小程序 2:app);NOT NULL" json:"app_type"` + ClientType int `gorm:"column:client_type;type:tinyint(4);comment:客户端类型(1:患者端 2:医生端 3:药师端);NOT NULL" json:"client_type"` + Status int `gorm:"column:status;type:tinyint(4);default:0;comment:状态(0:未弹 1:已弹)" json:"status"` + PopupType int `gorm:"column:popup_type;type:tinyint(4);comment:弹窗类型(1:结算费用规则 2:新优惠卷弹窗);NOT NULL" json:"popup_type"` + PopupTitle string `gorm:"column:popup_title;type:varchar(255);comment:标题" json:"popup_title"` + PopupContent string `gorm:"column:popup_content;type:varchar(1000);comment:内容" json:"popup_content"` + PopupImg string `gorm:"column:popup_img;type:varchar(255);comment:封面图片" json:"popup_img"` + PopupLink string `gorm:"column:popup_link;type:varchar(255);comment:跳转地址" json:"popup_link"` + Model +} + +func (m *Popup) TableName() string { + return "gdxz_popup" +} + +func (m *Popup) BeforeCreate(tx *gorm.DB) error { + if m.PopupId == 0 { + m.PopupId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/model/product.go b/api/model/product.go index 649c6e6..458c1b9 100644 --- a/api/model/product.go +++ b/api/model/product.go @@ -18,6 +18,7 @@ type Product struct { ProductPrice float64 `gorm:"column:product_price;type:decimal(10,2);comment:商品价格" json:"product_price"` MnemonicCode string `gorm:"column:mnemonic_code;type:varchar(50);comment:商品助记码(首字母简拼)" json:"mnemonic_code"` ProductType int `gorm:"column:product_type;type:tinyint(4);default:1;comment:药品类型(0:未知 1:中成药 2:西药)" json:"product_type"` + IsMajing int `gorm:"column:is_majing;type:tinyint(1);default:0;comment:是否麻精药品(0:否 1:是)" json:"is_majing"` ProductPlatformCode string `gorm:"column:product_platform_code;type:varchar(100);comment:处方平台商品编码" json:"product_platform_code"` ProductPharmacyCode string `gorm:"column:product_pharmacy_code;type:varchar(100);comment:第三方药店商品编码" json:"product_pharmacy_code"` ProductCoverImg string `gorm:"column:product_cover_img;type:varchar(255);comment:商品封面图" json:"product_cover_img"` diff --git a/api/model/userCoupon.go b/api/model/userCoupon.go index 15d563f..a4f64a3 100644 --- a/api/model/userCoupon.go +++ b/api/model/userCoupon.go @@ -8,15 +8,17 @@ import ( // UserCoupon 用户优惠卷表 type UserCoupon struct { - UserCouponId int64 `gorm:"column:user_coupon_id;type:bigint(19);primary_key;comment:主键id" json:"user_coupon_id"` - UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id;NOT NULL" json:"user_id"` - PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id" json:"patient_id"` - CouponId int64 `gorm:"column:coupon_id;type:bigint(19);comment:优惠卷id;NOT NULL" json:"coupon_id"` - UserCouponStatus int `gorm:"column:user_coupon_status;type:tinyint(1);default:0;comment:状态(0:未使用 1:已使用 3:已过期)" json:"user_coupon_status"` - CouponUseDate time.Time `gorm:"column:coupon_use_date;type:datetime;comment:使用时间" json:"coupon_use_date"` - ValidStartTime time.Time `gorm:"column:valid_start_time;type:datetime;comment:有效使用时间" json:"valid_start_time"` - ValidEndTime time.Time `gorm:"column:valid_end_time;type:datetime;comment:过期使用时间" json:"valid_end_time"` + UserCouponId int64 `gorm:"column:user_coupon_id;type:bigint(19);primary_key;comment:主键id" json:"user_coupon_id"` + UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id;NOT NULL" json:"user_id"` + PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id" json:"patient_id"` + CouponId int64 `gorm:"column:coupon_id;type:bigint(19);comment:优惠卷id;NOT NULL" json:"coupon_id"` + UserCouponStatus int `gorm:"column:user_coupon_status;type:tinyint(1);default:0;comment:状态(0:未使用 1:已使用 3:已过期)" json:"user_coupon_status"` + CouponUseDate *LocalTime `gorm:"column:coupon_use_date;type:datetime;comment:使用时间" json:"coupon_use_date"` + ValidStartTime time.Time `gorm:"column:valid_start_time;type:datetime;comment:有效使用时间" json:"valid_start_time"` + ValidEndTime time.Time `gorm:"column:valid_end_time;type:datetime;comment:过期使用时间" json:"valid_end_time"` Model + Coupon *Coupon `gorm:"foreignKey:CouponId;references:coupon_id" json:"coupon"` + User *User `gorm:"foreignKey:UserId;references:user_id" json:"user"` // 用户 } func (m *UserCoupon) TableName() string { diff --git a/api/requests/DoctorConfigFollowPackageItem.go b/api/requests/DoctorConfigFollowPackageItem.go new file mode 100644 index 0000000..fb62066 --- /dev/null +++ b/api/requests/DoctorConfigFollowPackageItem.go @@ -0,0 +1,10 @@ +package requests + +type DoctorConfigFollowPackageItemRequest struct { + DoctorConfigFollowPackageItem +} + +type DoctorConfigFollowPackageItem struct { + ServicePeriod int `json:"service_period" form:"service_period" label:"服务周期(天)" validate:"required"` + ServicePrice float64 `json:"service_price" form:"service_price" label:"服务价格" validate:"required,min=1"` // (0表示不限次) +} diff --git a/api/requests/OrderServicePackage.go b/api/requests/OrderServicePackage.go new file mode 100644 index 0000000..82459f5 --- /dev/null +++ b/api/requests/OrderServicePackage.go @@ -0,0 +1,68 @@ +package requests + +type OrderServicePackageRequest struct { + GetOrderServicePackagePage // 获取药品订单列表-分页 + CancelOrderServicePackage // 取消服务包订单 + OrderServicePackageExportList // 获取服务包订单列表-导出 +} + +// GetOrderServicePackagePage 订单-服务包表 +type GetOrderServicePackagePage struct { + Page int `json:"page" form:"page" label:"页码"` + PageSize int `json:"page_size" form:"page_size" label:"每页个数"` + OrderServiceId string `json:"order_service_id" form:"order_service_id" label:"主键id"` // 主键id + OrderId string `json:"order_id" form:"order_id" label:"订单id"` // 订单id + OrderServiceType *int `json:"order_service_type" form:"order_service_type" label:"服务包类型(1:健康包 2:随访包)"` // 服务包类型(1:健康包 2:随访包) + OrderServiceStatus *int `json:"order_service_status" form:"order_service_status" label:"订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消)"` // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + IsDelete *int `json:"is_delete" form:"is_delete" label:"删除状态(0:否 1:是)"` // 删除状态(0:否 1:是) + RefundStatus *int `json:"refund_status" form:"refund_status" label:"订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款)"` // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款) + PayChannel *int `json:"pay_channel" form:"pay_channel" label:"支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付)"` // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) + PayStatus *int `json:"pay_status" form:"pay_status" label:"支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)"` // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + OrderServiceNo string `json:"order_service_no" form:"order_service_no" label:"系统订单编号"` // 系统订单编号 + EscrowTradeNo string `json:"escrow_trade_no" form:"escrow_trade_no" label:"第三方支付流水号"` // 第三方支付流水号 + PayTime string `json:"pay_time" form:"pay_time" label:"支付时间"` // 支付时间 + StartTime string `json:"start_time" form:"start_time" label:"开始服务时间"` // 开始服务时间 + FinishTime string `json:"finish_time" form:"finish_time" label:"结束服务时间"` // 结束服务时间 + CancelTime string `json:"cancel_time" form:"cancel_time" label:"订单取消时间"` // 订单取消时间 + CancelReason *int `json:"cancel_reason" form:"cancel_reason" label:"取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时)"` // 取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时) + CancelRemarks string `json:"cancel_remarks" form:"cancel_remarks" label:"取消订单备注"` // 取消订单备注 + AddFinishStatus *int `json:"add_finish_status" form:"add_finish_status" label:"添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败)"` // 添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败) + AddFinishTime string `json:"add_finish_time" form:"add_finish_time" label:"添加完成订单延迟队列时间"` // 添加完成订单延迟队列时间 + PatientName string `json:"patient_name" form:"patient_name" label:"患者姓名-就诊人"` // 患者姓名-就诊人 + CreatedAt string `json:"created_at" form:"created_at" label:"订单创建时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 + Mobile string `json:"mobile" form:"mobile" label:"手机号-医生/患者"` + DoctorName string `json:"doctor_name" form:"doctor_name" label:"医生姓名"` +} + +// CancelOrderServicePackage 取消服务包订单 +type CancelOrderServicePackage struct { + RefundAmount *float64 `json:"refund_amount" form:"refund_amount" label:"退款金额"` + CancelRemarks string `json:"cancel_remarks" form:"cancel_remarks" validate:"required" label:"取消订单备注"` +} + +// OrderServicePackageExportList 获取服务包订单列表-导出 +type OrderServicePackageExportList struct { + Type int `json:"type" form:"type" label:"类型" validate:"required,oneof=1 2 3"` // 1:当前搜索数据 2:当前选择数据 3:全部数据 + Id string `json:"id" form:"id" label:"id"` // 选择数据的id,逗号分隔,当type为2时必填 + OrderId string `json:"order_id" form:"order_id" label:"订单id"` // 订单id + OrderServiceType *int `json:"order_service_type" form:"order_service_type" label:"服务包类型(1:健康包 2:随访包)"` // 服务包类型(1:健康包 2:随访包) + OrderServiceStatus *int `json:"order_service_status" form:"order_service_status" label:"订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消)"` // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + IsDelete *int `json:"is_delete" form:"is_delete" label:"删除状态(0:否 1:是)"` // 删除状态(0:否 1:是) + RefundStatus *int `json:"refund_status" form:"refund_status" label:"订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款)"` // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款) + PayChannel *int `json:"pay_channel" form:"pay_channel" label:"支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付)"` // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) + PayStatus *int `json:"pay_status" form:"pay_status" label:"支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)"` // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + OrderServiceNo string `json:"order_service_no" form:"order_service_no" label:"系统订单编号"` // 系统订单编号 + EscrowTradeNo string `json:"escrow_trade_no" form:"escrow_trade_no" label:"第三方支付流水号"` // 第三方支付流水号 + PayTime string `json:"pay_time" form:"pay_time" label:"支付时间"` // 支付时间 + StartTime string `json:"start_time" form:"start_time" label:"开始服务时间"` // 开始服务时间 + FinishTime string `json:"finish_time" form:"finish_time" label:"结束服务时间"` // 结束服务时间 + CancelTime string `json:"cancel_time" form:"cancel_time" label:"订单取消时间"` // 订单取消时间 + CancelReason *int `json:"cancel_reason" form:"cancel_reason" label:"取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时)"` // 取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时) + CancelRemarks string `json:"cancel_remarks" form:"cancel_remarks" label:"取消订单备注"` // 取消订单备注 + AddFinishStatus *int `json:"add_finish_status" form:"add_finish_status" label:"添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败)"` // 添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败) + AddFinishTime string `json:"add_finish_time" form:"add_finish_time" label:"添加完成订单延迟队列时间"` // 添加完成订单延迟队列时间 + PatientName string `json:"patient_name" form:"patient_name" label:"患者姓名-就诊人"` // 患者姓名-就诊人 + CreatedAt string `json:"created_at" form:"created_at" label:"订单创建时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 + Mobile string `json:"mobile" form:"mobile" label:"手机号-医生/患者"` + DoctorName string `json:"doctor_name" form:"doctor_name" label:"医生姓名"` +} diff --git a/api/requests/area.go b/api/requests/area.go index 2753dbd..79e086c 100644 --- a/api/requests/area.go +++ b/api/requests/area.go @@ -2,6 +2,8 @@ package requests type AreaRequest struct { GetAreaList // 获取地区列表 + AddArea // 新增地区 + PutArea // 修改地区 } // GetAreaList 获取地区列表 @@ -11,3 +13,19 @@ type GetAreaList struct { ParentId string `json:"parent_id" form:"parent_id" label:"上级编号"` AreaType int `json:"area_type" form:"area_type" label:"类型(1:国家,2:省,3:市,4:区县)"` } + +// AddArea 新增地区 +type AddArea struct { + AreaId string `json:"area_id" form:"area_id" label:"地区编号" validate:"required"` + AreaName string `json:"area_name" form:"area_name" label:"名称" validate:"required"` + ParentId string `json:"parent_id" form:"parent_id" label:"上级编号" validate:"required"` + AreaType *int `json:"area_type" form:"area_type" label:"类型(1:国家,2:省,3:市,4:区县)" validate:"required"` + Zip string `json:"zip" form:"zip" label:"邮编"` +} + +// PutArea 修改地区 +type PutArea struct { + AreaId string `json:"area_id" form:"area_id" label:"地区编号" validate:"required"` + AreaName string `json:"area_name" form:"area_name" label:"名称" validate:"required"` + Zip string `json:"zip" form:"zip" label:"邮编"` +} diff --git a/api/requests/coupon.go b/api/requests/coupon.go new file mode 100644 index 0000000..85c5454 --- /dev/null +++ b/api/requests/coupon.go @@ -0,0 +1,108 @@ +package requests + +type CouponRequest struct { + GetSystemCouponPage // 获取系统优惠卷列表-分页 + AddSystemCoupon // 新增系统优惠卷 + PutSystemCoupon // 修改系统优惠卷 + PutSystemCouponStatus // 修改系统优惠卷状态 + GetUserCouponPage // 获取用户优惠卷列表-分页 + GrantSystemCoupon // 发放系统优惠卷 +} + +// GetSystemCouponPage 获取系统优惠卷列表-分页 +type GetSystemCouponPage struct { + Page int `json:"page" form:"page" label:"页码"` + PageSize int `json:"page_size" form:"page_size" label:"每页个数"` + CouponName string `json:"coupon_name" form:"coupon_name" label:"优惠卷名称"` // 优惠卷名称 + CouponClient *int `json:"coupon_client" form:"coupon_client" label:"使用平台(1:小程序)"` // 使用平台(1:小程序) + CouponType *int `json:"coupon_type" form:"coupon_type" label:"优惠卷类型(1:无门槛 2:满减 3:数量)"` // 优惠卷类型(1:无门槛 2:满减 3:数量) + CouponStatus *int `json:"coupon_status" form:"coupon_status" label:"状态(1:正常 2:强制失效 3:结束 4:删除)"` // 状态(1:正常 2:强制失效 3:结束 4:删除) + DistributionObject *int `json:"distribution_object" form:"distribution_object" label:"发放对象(1:全部用户 2:新注册用户 3:会员 4:近期消费 5:近期购药 6:存量用户 7:健康包服务用户)"` // 发放对象(1:全部用户 2:新注册用户 3:会员 4:近期消费 5:近期购药 6:存量用户 7:健康包服务用户) + ApplicationScope *int `json:"application_scope" form:"application_scope" label:"适用范围(1:全场通用 2:问诊 3:按品牌适用 4:按类别适用 5:单品使用 6:全品类药品)"` // 适用范围(1:全场通用 2:问诊 3:按品牌适用 4:按类别适用 5:单品使用 6:全品类药品) + InquiryType string `json:"inquiry_type" form:"inquiry_type" label:"关联问诊类型,application_scope=问诊时存在生效,逗号分隔(1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药 6:检测)"` // 关联问诊类型,application_scope=问诊时存在生效,逗号分隔(1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药 6:检测) + BrandId string `json:"brand_id" form:"brand_id" label:"关联品牌id(如不限制品牌,此项为空)"` // 关联品牌id(如不限制品牌,此项为空) + IsMutex *int `json:"is_mutex" form:"is_mutex" label:"是否互斥(0:否 1:是)互斥情况下无法和其他优惠卷同时使用"` // 是否互斥(0:否 1:是)互斥情况下无法和其他优惠卷同时使用 + IsDisplay *int `json:"is_display" form:"is_display" label:"是否展示(0:否 1:是)"` // 是否展示(0:否 1:是) + ValidType *int `json:"valid_type" form:"valid_type" label:"有效类型(1:绝对时效,xxx-xxx时间段有效 2:相对时效 n天内有效)"` // 有效类型(1:绝对时效,xxx-xxx时间段有效 2:相对时效 n天内有效) + IsReissuableAfterExpire *int `json:"is_reissuable_after_expire" form:"is_reissuable_after_expire" label:"过期之后是否允许再次发放(0:否 1:是)"` // 过期之后是否允许再次发放(0:否 1:是) + IsPopup *int `json:"is_popup" form:"is_popup" label:"是否首页弹窗(0:否 1:是)"` // 是否首页弹窗(0:否 1:是) + CouponDesc string `json:"coupon_desc" form:"coupon_desc" label:"优惠卷描述"` + CreatedAt string `json:"created_at" form:"created_at" label:"创建时间"` // 创建时间 +} + +// AddSystemCoupon 新增系统优惠卷 +type AddSystemCoupon struct { + CouponName string `json:"coupon_name" form:"coupon_name" label:"优惠卷名称" validate:"required"` // 优惠卷名称 + CouponIcon string `json:"coupon_icon" form:"coupon_icon" label:"头像"` // 优惠卷名称 + CouponClient *int `json:"coupon_client" form:"coupon_client" label:"使用平台" validate:"required,oneof=1"` // 使用平台(1:小程序) + CouponType *int `json:"coupon_type" form:"coupon_type" label:"优惠卷类型" validate:"required,oneof=1 2 3"` // 优惠卷类型(1 :无门槛 2:满减 3:数量) + DistributionObject *int `json:"distribution_object" form:"distribution_object" label:"发放对象" validate:"required,oneof=1 2 3 4 5 6 7"` + ApplicationScope *int `json:"application_scope" form:"application_scope" label:"适用范围" validate:"required,oneof=1 2 3 4 5 6"` // (1:全场通用 2:问诊 3:按品牌适用 4:按类别适用 5:单品使用 6:全品类药品) + InquiryType []string `json:"inquiry_type" form:"inquiry_type" label:"关联问诊类型"` // 关联问诊类型,application_scope=问诊时存在生效,逗号分隔(1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药 6:检测) + BrandId *string `json:"brand_id" form:"brand_id" label:"关联品牌id"` // 关联品牌id(如不限制品牌,此项为空) + IsMutex *int `json:"is_mutex" form:"is_mutex" label:"是否互斥" validate:"required,oneof=0 1"` // 是否互斥(0:否 1:是)互斥情况下无法和其他优惠卷同时使用 + IsDisplay *int `json:"is_display" form:"is_display" label:"是否展示" validate:"required,oneof=0 1"` // 是否展示(0:否 1:是) + DistributionWithDay *int `json:"distribution_with_day" form:"distribution_with_day" label:"发放关联天数" validate:"omitempty,numeric"` // (发放对象为近期消费等类型时规定天数) + MinUsableNumber *int `json:"min_usable_number" form:"min_usable_number" label:"单商品最小可使用数量" validate:"omitempty,numeric"` // (默认为1,类型为数量时使用,如需限制优惠卷使用数量,请填写此处) + CouponCount *int `json:"coupon_count" form:"coupon_count" label:"发放数量" validate:"required,number,min=1"` // (默认为1,类型为数量时使用,如需限制优惠卷使用数量,请填写此处) + CouponPrice *float64 `json:"coupon_price" form:"coupon_price" label:"优惠卷金额" validate:"required,numeric,gt=0"` + WithAmount *float64 `json:"with_amount" form:"with_amount" label:"符合满减标准金额" validate:"omitempty,gt=1"` // (优惠卷类型为满减时使用) + ValidType *int `json:"valid_type" form:"valid_type" label:"有效类型" validate:"required,oneof=1 2"` // 有效类型(1:绝对时效,xxx-xxx时间段有效 2:相对时效 n天内有效) + ValidDays *int `json:"valid_days" form:"valid_days" label:"自领取之日起有效天数" validate:"omitempty,numeric,min=1"` // 自领取之日起有效天数 + ValidStartTime *string `json:"valid_start_time" form:"valid_start_time" label:"开始使用时间"` // 开始使用时间 + ValidEndTime *string `json:"valid_end_time" form:"valid_end_time" label:"结束使用时间"` // 结束使用时间 + ProductId []string `json:"product_id" form:"product_id" label:"关联商品id"` // ,逗号分隔,指定商品时,填入此项。 + ReissueIntervalDays *int `json:"reissue_interval_days" form:"reissue_interval_days" label:"确认收货后的再次发放间隔天数" validate:"omitempty,numeric,min=0"` // (如果设置为 0,则表示不再次发放。当适用范围为商品时生效) + IsReissuableAfterExpire *int `json:"is_reissuable_after_expire" form:"is_reissuable_after_expire" label:"过期之后是否允许再次发放" validate:"omitempty,oneof=0 1"` // 过期之后是否允许再次发放(0:否 1:是) + IsPopup *int `json:"is_popup" form:"is_popup" label:"是否首页弹窗" validate:"required,oneof=0 1"` // 是否首页弹窗(0:否 1:是) + CouponDesc *string `json:"coupon_desc" form:"coupon_desc" label:"优惠卷描述"` +} + +// PutSystemCoupon 修改系统优惠卷 +type PutSystemCoupon struct { + CouponName string `json:"coupon_name" form:"coupon_name" label:"优惠卷名称" validate:"required"` // 优惠卷名称 + CouponIcon string `json:"coupon_icon" form:"coupon_icon" label:"头像"` // 优惠卷名称 + DistributionObject *int `json:"distribution_object" form:"distribution_object" label:"发放对象" validate:"required,oneof=1 2 3 4 5 6 7"` // (1:全部用户 2:新注册用户 3:会员 4:近期消费 5:近期购药 6:存量用户 7:健康包服务用户) + InquiryType []string `json:"inquiry_type" form:"inquiry_type" label:"关联问诊类型"` // 关联问诊类型,application_scope=问诊时存在生效,逗号分隔(1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药 6:检测) + BrandId *string `json:"brand_id" form:"brand_id" label:"关联品牌id"` // 关联品牌id(如不限制品牌,此项为空) + IsMutex *int `json:"is_mutex" form:"is_mutex" label:"是否互斥" validate:"required,oneof=0 1"` // 是否互斥(0:否 1:是)互斥情况下无法和其他优惠卷同时使用 + IsDisplay *int `json:"is_display" form:"is_display" label:"是否展示" validate:"required,oneof=0 1"` // 是否展示(0:否 1:是) + DistributionWithDay *int `json:"distribution_with_day" form:"distribution_with_day" label:"发放关联天数" validate:"omitempty,numeric"` // (发放对象为近期消费等类型时规定天数) + MinUsableNumber *int `json:"min_usable_number" form:"min_usable_number" label:"单商品最小可使用数量" validate:"omitempty,numeric"` // (默认为1,类型为数量时使用,如需限制优惠卷使用数量,请填写此处) + CouponCount *int `json:"coupon_count" form:"coupon_count" label:"发放数量" validate:"required,number,min=1"` // (默认为1,类型为数量时使用,如需限制优惠卷使用数量,请填写此处) + CouponPrice *float64 `json:"coupon_price" form:"coupon_price" label:"优惠卷金额" validate:"required,numeric,gt=0"` // 优惠卷金额 + ProductId []string `json:"product_id" form:"product_id" label:"关联商品id"` // ,逗号分隔,指定商品时,填入此项。 + ReissueIntervalDays *int `json:"reissue_interval_days" form:"reissue_interval_days" label:"确认收货后的再次发放间隔天数" validate:"omitempty,numeric,min=0"` // (如果设置为 0,则表示不再次发放。当适用范围为商品时生效) + IsReissuableAfterExpire *int `json:"is_reissuable_after_expire" form:"is_reissuable_after_expire" label:"过期之后是否允许再次发放" validate:"omitempty,oneof=0 1"` // 过期之后是否允许再次发放(0:否 1:是) + IsPopup *int `json:"is_popup" form:"is_popup" label:"是否首页弹窗" validate:"required,oneof=0 1"` // 是否首页弹窗(0:否 1:是) + CouponDesc *string `json:"coupon_desc" form:"coupon_desc" label:"优惠卷描述"` +} + +// PutSystemCouponStatus 修改系统优惠卷状态 +type PutSystemCouponStatus struct { + CouponStatus int `json:"coupon_status" form:"coupon_status" label:"状态" validate:"required,oneof=2 3 4"` // (1:正常 2:强制失效 3:结束 4:删除) +} + +// GetUserCouponPage 获取用户优惠卷列表-分页 +type GetUserCouponPage struct { + Page int `json:"page" form:"page" label:"页码"` + PageSize int `json:"page_size" form:"page_size" label:"每页个数"` + CouponName string `json:"coupon_name" form:"coupon_name" label:"优惠卷名称"` // 优惠卷名称 + CouponId string `json:"coupon_id" form:"coupon_id" label:"优惠卷编号"` // 优惠卷名称 + UserCouponStatus *int `json:"user_coupon_status" form:"user_coupon_status" label:"使用状态(0:未使用 1:已使用 3:已过期)"` // 状态(1:正常 2:强制失效 3:结束 4:删除) + CouponUseDate string `json:"coupon_use_date" form:"coupon_use_date" label:"使用时间"` // 使用时间 + ValidStartTime string `json:"valid_start_time" form:"valid_start_time" label:"有效使用时间"` // 有效使用时间 + ValidEndTime string `json:"valid_end_time" form:"valid_end_time" label:"过期使用时间"` // 过期使用时间 + CreatedAt string `json:"created_at" form:"created_at" label:"创建时间"` // 创建时间 + Mobile string `json:"mobile" form:"mobile" label:"手机号"` + UserName string `json:"user_name" form:"user_name" label:"用户名"` +} + +// GrantSystemCoupon 发放系统优惠卷 +type GrantSystemCoupon struct { + Type int `json:"type" form:"type" label:"用户编号" validate:"required,oneof=1 2"` // 发放类型(1:具体用户 2:全部用户) + UserId string `json:"user_id" form:"user_id" label:"用户编号" validate:"number"` // 用户编号 + TotalQuantity int `json:"total_quantity" form:"total_quantity" label:"总发放数量" validate:"required,number,min=1"` // 总发放数量-发完即止 + SingleQuantity int `json:"single_quantity" form:"single_quantity" label:"个人可发放数量" validate:"required,number,min=1"` // 个人可发放数量-发完即止,依次发放,到达发放总数量后即停止 + IsForce *int `json:"is_follow_rules" form:"is_force_grant" label:"是否遵循优惠卷发放对象规则" validate:"oneof=0 1"` // 是否遵循优惠卷发放对象规则(0:否 1:是)(是:遵循优惠卷发放对象规则进行发放。否:不满足优惠卷发放对象规则也会发放一张) +} diff --git a/api/requests/doctorConfigFollowPackage.go b/api/requests/doctorConfigFollowPackage.go new file mode 100644 index 0000000..8493748 --- /dev/null +++ b/api/requests/doctorConfigFollowPackage.go @@ -0,0 +1,32 @@ +package requests + +type DoctorConfigFollowPackageRequest struct { + GetDoctorFollowPage // 获取医生健康包列表-分页 + PutDoctorFollow // 修改医生健康包配置 + AddDoctorFollow // 新增医生健康包配置 +} + +// GetDoctorFollowPage 获取医生健康包列表-分页 +type GetDoctorFollowPage struct { + Page int `json:"page" form:"page" label:"页码"` + PageSize int `json:"page_size" form:"page_size" label:"每页个数"` + Mobile string `json:"mobile" form:"mobile" label:"手机号"` + DoctorName string `json:"doctor_name" form:"doctor_name" label:"医生姓名"` +} + +// PutDoctorFollow 修改医生健康包配置 +type PutDoctorFollow struct { + MonthlyFrequency *int `json:"monthly_frequency" form:"monthly_frequency" label:"每月次数" validate:"required"` // (0表示不限次) + ServiceRounds *int `json:"service_rounds" form:"service_rounds" label:"服务回合数" validate:"required"` // (0表示不限次) + IsEnable *int `json:"is_enable" form:"is_enable" validate:"oneof=0 1" label:"是否启用" validate:"required"` // 0:否 1:是 + DoctorConfigFollowPackageItem []*DoctorConfigFollowPackageItem `json:"doctor_config_follow_package_item" form:"doctor_config_follow_package_item" label:"医生健康包明细" validate:"required"` // +} + +// AddDoctorFollow 新增医生健康包配置 +type AddDoctorFollow struct { + DoctorId string `json:"doctor_id" form:"doctor_id" label:"医生id" validate:"required"` + MonthlyFrequency *int `json:"monthly_frequency" form:"monthly_frequency" label:"每月次数" validate:"required"` // (0表示不限次) + ServiceRounds *int `json:"service_rounds" form:"service_rounds" label:"服务回合数" validate:"required"` // (0表示不限次) + IsEnable *int `json:"is_enable" form:"is_enable" validate:"oneof=0 1" label:"是否启用" validate:"required"` // 0:否 1:是 + DoctorConfigFollowPackageItem []*DoctorConfigFollowPackageItem `json:"doctor_config_follow_package_item" form:"doctor_config_follow_package_item" label:"医生健康包明细" validate:"required"` // +} diff --git a/api/requests/doctorConfigHealthPackage.go b/api/requests/doctorConfigHealthPackage.go new file mode 100644 index 0000000..e31b054 --- /dev/null +++ b/api/requests/doctorConfigHealthPackage.go @@ -0,0 +1,30 @@ +package requests + +type DoctorConfigHealthPackageRequest struct { + GetDoctorHealthPage // 获取医生健康包列表-分页 + PutDoctorHealth // 修改医生健康包配置 + AddDoctorHealth // 新增医生健康包配置 +} + +// GetDoctorHealthPage 获取医生健康包列表-分页 +type GetDoctorHealthPage struct { + Page int `json:"page" form:"page" label:"页码"` + PageSize int `json:"page_size" form:"page_size" label:"每页个数"` + Mobile string `json:"mobile" form:"mobile" label:"手机号"` + DoctorName string `json:"doctor_name" form:"doctor_name" label:"医生姓名"` +} + +// PutDoctorHealth 修改医生健康包配置 +type PutDoctorHealth struct { + PackageId string `json:"package_id" form:"package_id" label:"健康包配置id" validate:"required"` + ServicePrice string `json:"service_price" form:"service_price" label:"服务价格" validate:"required,min=1"` + IsEnable int `json:"is_enable" form:"is_enable" validate:"oneof=0 1" label:"是否启用"` // 0:否 1:是 +} + +// AddDoctorHealth 新增医生健康包配置 +type AddDoctorHealth struct { + DoctorId string `json:"doctor_id" form:"doctor_id" label:"医生id" validate:"required"` + PackageId string `json:"package_id" form:"package_id" label:"健康包配置id" validate:"required"` + ServicePrice string `json:"service_price" form:"service_price" label:"服务价格" validate:"required,min=1"` + IsEnable int `json:"is_enable" form:"is_enable" validate:"oneof=0 1" label:"是否启用"` // 0:否 1:是 +} diff --git a/api/requests/healthPackage.go b/api/requests/healthPackage.go new file mode 100644 index 0000000..2d19bda --- /dev/null +++ b/api/requests/healthPackage.go @@ -0,0 +1,37 @@ +package requests + +type HealthPackageRequest struct { + GetHealthPackagePage // 获取健康包列表-分页 + PutHealthPackage // 修改健康包 + AddHealthPackage // 新增健康包 + GetHealthPackageList // 获取健康包列表-限制条数 +} + +// GetHealthPackagePage 获取健康包列表-分页 +type GetHealthPackagePage struct { + Page int `json:"page" form:"page" label:"页码"` + PageSize int `json:"page_size" form:"page_size" label:"每页个数"` +} + +// GetHealthPackageList 获取健康包列表-限制条数 +type GetHealthPackageList struct { + Limit int `json:"limit" form:"limit" label:"限制条数"` +} + +// PutHealthPackage 修改健康包 +type PutHealthPackage struct { + ServiceCount int `json:"service_count" form:"service_count" label:"总服务次数" validate:"required,min=1"` + MonthlyFrequency int `json:"monthly_frequency" form:"monthly_frequency" label:"每月次数" validate:"required,min=1"` + EffectiveDays string `json:"effective_days" form:"effective_days" label:"服务有效天数" validate:"required,min=1"` + ServiceRate string `json:"service_rate" form:"service_rate" label:"服务费率。100为满值,表示1,正常费率。" validate:"required,min=1"` + HealthPackageProduct []*HealthPackageProduct `json:"health_package_product" form:"health_package_product" label:"关联商品" validate:"required"` +} + +// AddHealthPackage 新增健康包 +type AddHealthPackage struct { + ServiceCount int `json:"service_count" form:"service_count" label:"总服务次数" validate:"required,min=1"` + MonthlyFrequency int `json:"monthly_frequency" form:"monthly_frequency" label:"每月次数" validate:"required,min=1"` + EffectiveDays string `json:"effective_days" form:"effective_days" label:"服务有效天数" validate:"required,min=1"` + ServiceRate string `json:"service_rate" form:"service_rate" label:"服务费率。100为满值,表示1,正常费率。" validate:"required,min=1"` + HealthPackageProduct []*HealthPackageProduct `json:"health_package_product" form:"health_package_product" label:"关联商品" validate:"required"` +} diff --git a/api/requests/healthPackageProduct.go b/api/requests/healthPackageProduct.go new file mode 100644 index 0000000..6d9dece --- /dev/null +++ b/api/requests/healthPackageProduct.go @@ -0,0 +1,14 @@ +package requests + +type HealthPackageProductRequest struct { + HealthPackageProduct // 健康包-关联商品 +} + +// HealthPackageProduct 健康包-关联商品 +type HealthPackageProduct struct { + PackageId string `json:"package_id" form:"package_id" label:"健康包id"` + ProductId string `gorm:"primaryKey" json:"product_id" form:"product_id" label:"商品id"` + ProductName string `json:"product_name" form:"product_name" label:"商品名称"` + Quantity int `json:"quantity" form:"quantity" label:"数量"` + DiscountProductPrice float64 `json:"discount_product_price" form:"discount_product_price" label:"折扣商品价格"` +} diff --git a/api/requests/hospital.go b/api/requests/hospital.go index cb4d9ff..6fa3615 100644 --- a/api/requests/hospital.go +++ b/api/requests/hospital.go @@ -1,13 +1,17 @@ package requests type HospitalRequest struct { - GetHospitalLimit // 获取医院列表-限制条数 + GetHospitalList // 获取医院列表 + GetHospitalPage // 获取医院列表-分页 + AddHospital // 新增医院 + PutHospital // 修改医院 } -// GetHospitalLimit 获取医院列表-限制条数 -type GetHospitalLimit struct { +// GetHospitalList 获取医院列表 +type GetHospitalList struct { HospitalName string `json:"hospital_name" form:"hospital_name" label:"医院名称"` HospitalLevelName string `json:"hospital_level_name" form:"hospital_level_name" label:"医院等级名称"` + HospitalStatus int `json:"hospital_status" form:"hospital_status" label:"状态"` // 状态(0:禁用 1:正常 2:删除) ProvinceId int `json:"province_id" form:"province_id" label:"省份id"` Province string `json:"province" form:"province" label:"省份"` CityId int `json:"city_id" form:"city_id" label:"城市id"` @@ -15,3 +19,46 @@ type GetHospitalLimit struct { CountyId int `json:"county_id" form:"county_id" label:"区县id"` County string `json:"county" form:"county" label:"区县"` } + +// GetHospitalPage 获取医院列表-分页 +type GetHospitalPage struct { + Page int `json:"page" form:"page" label:"页码"` + PageSize int `json:"page_size" form:"page_size" label:"每页个数"` + HospitalName string `json:"hospital_name" form:"hospital_name" label:"医院名称"` + HospitalLevelName string `json:"hospital_level_name" form:"hospital_level_name" label:"医院等级名称"` + ProvinceId int `json:"province_id" form:"province_id" label:"省份id"` + CityId int `json:"city_id" form:"city_id" label:"城市id"` + CountyId int `json:"county_id" form:"county_id" label:"区县id"` +} + +// AddHospital 新增医院 +type AddHospital struct { + HospitalName string `json:"hospital_name" form:"hospital_name" label:"医院名称" validate:"required"` // 医院名称 + HospitalStatus *int `json:"hospital_status" form:"hospital_status" label:"状态" validate:"required,oneof=0 1 2"` // 状态(0:禁用 1:正常 2:删除) + HospitalLevelName string `json:"hospital_level_name" form:"hospital_level_name" label:"医院等级名称" validate:"required"` // 医院等级名称 + PostCode string `json:"post_code" form:"post_code" label:"邮政编码"` // 邮政编码 + TelePhone string `json:"tele_phone" form:"tele_phone" label:"电话"` // 电话 + ProvinceId int `json:"province_id" form:"province_id" label:"省份id" validate:"required"` // 省份id + CityId int `json:"city_id" form:"city_id" label:"城市id" validate:"required"` // 城市id + CountyId int `json:"county_id" form:"county_id" label:"区县id" validate:"required"` // 区县id + Address string `json:"address" form:"address" label:"地址" validate:"required"` // 地址 + Lat string `json:"lat" form:"lat" label:"纬度"` // 纬度 + Lng string `json:"lng" form:"lng" label:"经度"` // 经度 + Desc string `json:"desc" form:"desc" label:"简介"` // 简介 +} + +// PutHospital 修改医院 +type PutHospital struct { + HospitalName string `json:"hospital_name" form:"hospital_name" label:"医院名称" validate:"required"` // 医院名称 + HospitalStatus *int `json:"hospital_status" form:"hospital_status" label:"状态" validate:"required,oneof=0 1 2"` // 状态(0:禁用 1:正常 2:删除) + HospitalLevelName string `json:"hospital_level_name" form:"hospital_level_name" label:"医院等级名称" validate:"required"` // 医院等级名称 + PostCode string `json:"post_code" form:"post_code" label:"邮政编码"` // 邮政编码 + TelePhone string `json:"tele_phone" form:"tele_phone" label:"电话"` // 电话 + ProvinceId int `json:"province_id" form:"province_id" label:"省份id" validate:"required"` // 省份id + CityId int `json:"city_id" form:"city_id" label:"城市id" validate:"required"` // 城市id + CountyId int `json:"county_id" form:"county_id" label:"区县id" validate:"required"` // 区县id + Address string `json:"address" form:"address" label:"地址" validate:"required"` // 地址 + Lat string `json:"lat" form:"lat" label:"纬度"` // 纬度 + Lng string `json:"lng" form:"lng" label:"经度"` // 经度 + Desc string `json:"desc" form:"desc" label:"简介"` // 简介 +} diff --git a/api/requests/inquiryConfig.go b/api/requests/inquiryConfig.go index 5ec1910..93cc2dc 100644 --- a/api/requests/inquiryConfig.go +++ b/api/requests/inquiryConfig.go @@ -7,6 +7,7 @@ type InquiryConfigRequest struct { GetSystemInquiryConfigPage // 获取系统问诊配置列表-分页 PutSystemInquiryConfig // 修改系统问诊配置 GetSystemInquiryConfigDetail // 系统问诊配置详情-条件 + GetDoctorInquiryConfig // 医生问诊配置详情 } // GetDoctorInquiryConfigPage 获取开启问诊配置医生列表-分页 @@ -20,6 +21,14 @@ type GetDoctorInquiryConfigPage struct { IsEnable *int `json:"is_enable" form:"is_enable" label:"是否启用"` // 0:否 1:是 } +// GetDoctorInquiryConfig 医生问诊配置详情 +type GetDoctorInquiryConfig struct { + InquiryConfigId string `json:"inquiry_config_id" form:"inquiry_config_id" label:"主键id"` + InquiryType *int `json:"inquiry_type" form:"inquiry_type" label:"问诊类型"` // 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测 + InquiryMode *int `json:"inquiry_mode" form:"inquiry_mode" label:"问诊方式"` // 1:图文 2:视频 3:语音 4:电话 5:会员 + DoctorId string `json:"doctor_id" form:"doctor_id" label:"医生id"` +} + // PutDoctorInquiryConfig 修改医生问诊配置 type PutDoctorInquiryConfig struct { DoctorId string `json:"doctor_id" form:"doctor_id" validate:"required"` // 医生id @@ -88,5 +97,5 @@ type SystemInquiryTime struct { // GetSystemInquiryConfigDetail 系统问诊配置详情-条件 type GetSystemInquiryConfigDetail struct { InquiryType *int `json:"inquiry_type" form:"inquiry_type" validate:"required,oneof=1 2 3 4 5" label:"问诊类型"` // 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测 - InquiryMode *int `json:"inquiry_mode" form:"inquiry_mode" validate:"required,oneof=1 2 3 4 5 6" label:"问诊方式"` + InquiryMode *int `json:"inquiry_mode" form:"inquiry_mode" validate:"required,oneof=1 2 3 4 5 6 7 8 9" label:"问诊方式"` } diff --git a/api/requests/orderInquiry.go b/api/requests/orderInquiry.go index 8419ded..30c8c95 100644 --- a/api/requests/orderInquiry.go +++ b/api/requests/orderInquiry.go @@ -36,8 +36,8 @@ type GetOrderInquiryPage struct { // CancelOrderInquiry 取消问诊订单 type CancelOrderInquiry struct { - RefundAmount float64 `json:"refund_amount" form:"refund_amount" validate:"required" label:"退款金额"` - CancelRemarks string `json:"cancel_remarks" form:"cancel_remarks" validate:"required" label:"取消订单备注"` + RefundAmount *float64 `json:"refund_amount" form:"refund_amount" label:"退款金额"` + CancelRemarks string `json:"cancel_remarks" form:"cancel_remarks" validate:"required" label:"取消订单备注"` } // GetOrderInquiryRecordPage 获取问诊记录列表-分页 diff --git a/api/requests/orderProduct.go b/api/requests/orderProduct.go index b34a675..272fb75 100644 --- a/api/requests/orderProduct.go +++ b/api/requests/orderProduct.go @@ -31,6 +31,8 @@ type GetOrderProductPage struct { ConsigneeTel string `json:"consignee_tel" form:"cancel_reason" label:"收货人电话"` PatientName string `json:"patient_name" form:"patient_name" label:"患者姓名-就诊人"` Mobile string `json:"mobile" form:"mobile" label:"手机号-医生/患者"` + ProductName string `json:"product_name" form:"product_name" label:"药品名称"` + CommonName string `json:"common_name" form:"common_name" label:"药品通用名"` } // CancelOrderProduct 取消药品订单 diff --git a/api/requests/product.go b/api/requests/product.go index 353c905..9028a34 100644 --- a/api/requests/product.go +++ b/api/requests/product.go @@ -7,6 +7,8 @@ type ProductRequest struct { PutProduct // 修改商品 PutProductStatus // 修改商品状态(上/下架) GetPlatformProductList // 获取平台商品列表 + ProductExportList // 系统药品-导出 + GetProductList // 获取系统商品列表-限制条数 } // GetPlatformProductPage 获取平台商品列表-分页 @@ -33,12 +35,31 @@ type GetPlatformProductList struct { // GetProductPage 获取系统商品列表-分页 type GetProductPage struct { - Page int `json:"page" form:"page" label:"页码"` - PageSize int `json:"page_size" form:"page_size" label:"每页个数"` + Page int `json:"page" form:"page" label:"页码"` + PageSize int `json:"page_size" form:"page_size" label:"每页个数"` + ProductName string `json:"product_name" form:"product_name" label:"商品名称"` // 商品名称 + CommonName string `json:"common_name" form:"common_name" label:"商品通用名"` // 商品通用名 + MnemonicCode string `json:"mnemonic_code" form:"mnemonic_code" label:"商品助记码"` // 商品助记码(首字母简拼) + ProductType *int `json:"product_type" form:"product_type" label:"药品类型"` // 药品类型(0:未知 1:中成药 2:西药) + IsMajing *int `json:"is_majing" form:"is_majing" label:"药品类型"` // 是否麻精药品(0:否 1:是) + ProductPlatformId string `json:"product_platform_id" form:"product_platform_id" label:"平台商品id"` // 处方平台商品id + ProductPlatformCode string `json:"product_platform_code" form:"product_platform_code" label:"处方平台编码"` // 处方平台商品编码 + ProductPharmacyCode string `json:"product_pharmacy_code" form:"product_pharmacy_code" label:"药店编码"` // 第三方药店商品编码 + LicenseNumber string `json:"license_number" form:"license_number" label:"批准文号"` // 批准文号 + Manufacturer string `json:"manufacturer" form:"manufacturer" label:"生产厂家"` // 生产厂家 + ProductRemarks string `json:"product_remarks" form:"product_remarks" label:"商品备注"` // 商品备注 + ProductStatus *int `json:"product_status" form:"product_status" label:"商品状态"` // 商品状态(1:正常 2:下架) + Order *GetProductPageOrder `json:"order" form:"order" label:"排序"` +} + +// GetProductList 获取系统商品列表-限制条数 +type GetProductList struct { + ProductId string `json:"product_id" form:"product_id" label:"商品id"` // 商品id ProductName string `json:"product_name" form:"product_name" label:"商品名称"` // 商品名称 CommonName string `json:"common_name" form:"common_name" label:"商品通用名"` // 商品通用名 MnemonicCode string `json:"mnemonic_code" form:"mnemonic_code" label:"商品助记码"` // 商品助记码(首字母简拼) ProductType *int `json:"product_type" form:"product_type" label:"药品类型"` // 药品类型(0:未知 1:中成药 2:西药) + IsMajing *int `json:"is_majing" form:"is_majing" label:"药品类型"` // 是否麻精药品(0:否 1:是) ProductPlatformId string `json:"product_platform_id" form:"product_platform_id" label:"平台商品id"` // 处方平台商品id ProductPlatformCode string `json:"product_platform_code" form:"product_platform_code" label:"处方平台编码"` // 处方平台商品编码 ProductPharmacyCode string `json:"product_pharmacy_code" form:"product_pharmacy_code" label:"药店编码"` // 第三方药店商品编码 @@ -46,6 +67,11 @@ type GetProductPage struct { Manufacturer string `json:"manufacturer" form:"manufacturer" label:"生产厂家"` // 生产厂家 ProductRemarks string `json:"product_remarks" form:"product_remarks" label:"商品备注"` // 商品备注 ProductStatus *int `json:"product_status" form:"product_status" label:"商品状态"` // 商品状态(1:正常 2:下架) + Limit int `json:"limit" form:"limit" label:"限制条数"` +} + +type GetProductPageOrder struct { + Stock string `json:"stock" form:"stock" label:"库存" validate:"oneof=desc asc"` } // AddProduct 新增商品 @@ -56,6 +82,7 @@ type AddProduct struct { ProductPrice float64 `json:"product_price" form:"product_price" label:"商品价格" validate:"required"` // 商品价格 MnemonicCode string `json:"mnemonic_code" form:"mnemonic_code" label:"商品助记码"` // 商品助记码(首字母简拼) ProductType *int `json:"product_type" form:"product_type" label:"药品类型" validate:"oneof=0 1 2"` // 药品类型(0:未知 1:中成药 2:西药) + IsMajing *int `json:"is_majing" form:"is_majing" label:"是否麻精药品" validate:"oneof=0 1"` // 是否麻精药品(0:否 1:是) ProductPlatformCode string `json:"product_platform_code" form:"product_platform_code" label:"处方平台商品编码" validate:"required"` // 处方平台商品编码 ProductPharmacyCode string `json:"product_pharmacy_code" form:"product_pharmacy_code" label:"第三方药店商品编码" validate:"required"` // 第三方药店商品编码 ProductCoverImg string `json:"product_cover_img" form:"product_cover_img" label:"商品封面图"` // 商品封面图 @@ -89,3 +116,20 @@ type PutProduct struct { type PutProductStatus struct { ProductStatus *int `json:"product_status" form:"product_status" label:"商品状态" validate:"required,oneof=1 2"` // 商品状态(1:正常 2:下架) } + +// ProductExportList 系统药品-导出 +type ProductExportList struct { + Type int `json:"type" form:"type" label:"类型" validate:"required,oneof=1 2 3"` // 1:当前搜索数据 2:当前选择数据 3:全部数据 + Id string `json:"id" form:"id" label:"id"` // 选择数据的id,逗号分隔,当type为2时必填 + ProductName string `json:"product_name" form:"product_name" label:"商品名称"` // 商品名称 + CommonName string `json:"common_name" form:"common_name" label:"商品通用名"` // 商品通用名 + MnemonicCode string `json:"mnemonic_code" form:"mnemonic_code" label:"商品助记码"` // 商品助记码(首字母简拼) + ProductType *int `json:"product_type" form:"product_type" label:"药品类型"` // 药品类型(0:未知 1:中成药 2:西药) + ProductPlatformId string `json:"product_platform_id" form:"product_platform_id" label:"平台商品id"` // 处方平台商品id + ProductPlatformCode string `json:"product_platform_code" form:"product_platform_code" label:"处方平台编码"` // 处方平台商品编码 + ProductPharmacyCode string `json:"product_pharmacy_code" form:"product_pharmacy_code" label:"药店编码"` // 第三方药店商品编码 + LicenseNumber string `json:"license_number" form:"license_number" label:"批准文号"` // 批准文号 + Manufacturer string `json:"manufacturer" form:"manufacturer" label:"生产厂家"` // 生产厂家 + ProductRemarks string `json:"product_remarks" form:"product_remarks" label:"商品备注"` // 商品备注 + ProductStatus *int `json:"product_status" form:"product_status" label:"商品状态"` // 商品状态(1:正常 2:下架) +} diff --git a/api/requests/userDoctor.go b/api/requests/userDoctor.go index cf61673..3d06635 100644 --- a/api/requests/userDoctor.go +++ b/api/requests/userDoctor.go @@ -138,6 +138,7 @@ type PutMulti struct { // GetUserDoctorList 获取医生列表 type GetUserDoctorList struct { + DoctorId string `json:"doctor_id" form:"doctor_id" label:"医生id"` UserName string `json:"user_name" form:"user_name" label:"医生姓名"` IDCardStatus *int `json:"idcard_status" form:"idcard_status" label:"身份证状态"` // (0:未认证 1:认证通过 2:认证失败) IdenAuthStatus *int `json:"iden_auth_status" form:"iden_auth_status" label:"认证状态"` // (0:未认证 1:认证通过 2:审核中 3:认证失败) diff --git a/api/requests/userPatient.go b/api/requests/userPatient.go index 8db3717..a0c2195 100644 --- a/api/requests/userPatient.go +++ b/api/requests/userPatient.go @@ -4,6 +4,7 @@ type UserPatientRequest struct { GetUserPatientPage // 获取患者列表-分页 PutUserDoctorStatus // 修改患者状态 UserPatientExportList // 患者列表-导出 + GetUserPatientList // 获取患者列表-限制条数 } // GetUserPatientPage 获取患者列表-分页 @@ -31,3 +32,11 @@ type UserPatientExportList struct { Mobile string `json:"mobile" form:"mobile" label:"手机号"` CreatedAt string `json:"created_at" form:"created_at" label:"注册时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 } + +// GetUserPatientList 获取患者列表-限制条数 +type GetUserPatientList struct { + UserName string `json:"user_name" form:"user_name" label:"用户名称"` + Status *int `json:"status" form:"status" label:"状态"` // (0:禁用 1:正常 2:删除) + Mobile string `json:"mobile" form:"mobile" label:"手机号"` + CreatedAt string `json:"created_at" form:"created_at" label:"注册时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 +} diff --git a/api/router/router.go b/api/router/router.go index 57e7778..9967888 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -128,7 +128,7 @@ func basicRouter(r *gin.Engine, api controller.Api) { hospitalGroup := basicGroup.Group("/hospital") { // 获取医院列表-限制条数 - hospitalGroup.GET("/list", api.Hospital.GetHospitalLimit) + hospitalGroup.GET("/list", api.Hospital.GetHospitalList) } // 专长管理-基础数据 @@ -165,11 +165,7 @@ func basicRouter(r *gin.Engine, api controller.Api) { areaGroup := basicGroup.Group("/area") { // 获取地区列表 - areaGroup.GET("/list", api.Area.GetAreaList) - - // 获取地区列表-分页 - - // 地区详情 + areaGroup.GET("/list", api.Basic.Area.GetAreaList) // 修改地区 @@ -448,6 +444,21 @@ func privateRouter(r *gin.Engine, api controller.Api) { inquiryRecordGroup.GET("/:order_inquiry_id", api.OrderInquiry.GetOrderInquiryRecord) } + // 服务包订单 + serviceGroup := orderGroup.Group("/service") + { + // 获取服务包订单列表-分页 + serviceGroup.POST("/page", api.OrderServicePackage.GetOrderServicePackagePage) + + // 获取服务包订单详情 + serviceGroup.GET("/:order_service_id", api.OrderServicePackage.GetOrderServicePackage) + + // 获取服务包订单服务权益详情 + serviceGroup.GET("/detail/:order_service_id", api.OrderServicePackage.GetOrderServicePackageDetailInfo) + + // 取消服务包订单 + serviceGroup.PUT("/cancel/:order_service_id", api.OrderServicePackage.CancelOrderServicePackage) + } } // 病例管理 @@ -471,6 +482,9 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 获取患者列表-分页 patientGroup.GET("", api.UserPatient.GetUserPatientPage) + // 获取患者列表-限制条数 + patientGroup.GET("/list", api.UserPatient.GetUserPatientList) + // 患者详情 patientGroup.GET("/:patient_id", api.UserPatient.GetUserPatient) @@ -501,41 +515,88 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 问诊管理 inquiryGroup := adminGroup.Group("/inquiry") { - // 问诊配置 - configGroup := inquiryGroup.Group("/config") + // 医生问诊配置 + doctorGroup := inquiryGroup.Group("/doctor") { - // 医生问诊配置 - doctorGroup := configGroup.Group("/doctor") + // 获取开启问诊配置医生列表-分页 + doctorGroup.GET("/page", api.InquiryConfig.GetDoctorInquiryConfigPage) + + // 医生问诊配置详情 + doctorGroup.GET("", api.InquiryConfig.GetDoctorInquiryConfig) + + // 修改医生问诊配置 + doctorGroup.PUT("/:inquiry_config_id", api.InquiryConfig.PutDoctorInquiryConfig) + + // 新增医生问诊配置 + doctorGroup.POST("", api.InquiryConfig.AddDoctorInquiryConfig) + + // 医生健康包配置 + healthGroup := doctorGroup.Group("/health") { - // 获取开启问诊配置医生列表-分页 - doctorGroup.GET("", api.InquiryConfig.GetDoctorInquiryConfigPage) + // 获取开启健康包服务的医生-分页 + healthGroup.GET("", api.DoctorConfigHealthPackage.GetDoctorHealthPage) - // 医生问诊配置详情 - doctorGroup.GET("/:inquiry_config_id", api.InquiryConfig.GetDoctorInquiryConfig) + // 医生健康包配置详情 + healthGroup.GET("/:health_package_id", api.DoctorConfigHealthPackage.GetDoctorHealth) - // 修改医生问诊配置 - doctorGroup.PUT("/:inquiry_config_id", api.InquiryConfig.PutDoctorInquiryConfig) + // 修改医生健康包配置 + healthGroup.PUT("/:health_package_id", api.DoctorConfigHealthPackage.PutDoctorHealth) - // 新增医生问诊配置 - doctorGroup.POST("", api.InquiryConfig.AddDoctorInquiryConfig) + // 新增医生健康包配置 + healthGroup.POST("", api.DoctorConfigHealthPackage.AddDoctorHealth) } - // 系统问诊配置 - systemGroup := configGroup.Group("/system") + // 医生随访包配置 + followGroup := doctorGroup.Group("/follow") { - // 获取系统问诊配置列表-分页 - systemGroup.GET("", api.InquiryConfig.GetSystemInquiryConfigPage) + // 获取开启随访包服务的医生-分页 + followGroup.GET("", api.DoctorConfigFollowPackage.GetDoctorFollowPage) - // 系统问诊配置详情-id - systemGroup.GET("/:system_inquiry_config_id", api.InquiryConfig.GetSystemInquiryConfig) + // 医生随访包配置详情 + followGroup.GET("/:follow_package_id", api.DoctorConfigFollowPackage.GetDoctorFollow) - // 修改系统问诊配置 - systemGroup.PUT("/:system_inquiry_config_id", api.InquiryConfig.PutSystemInquiryConfig) + // 修改医生随访包配置 + followGroup.PUT("/:follow_package_id", api.DoctorConfigFollowPackage.PutDoctorFollow) - // 系统问诊配置详情-条件 - systemGroup.GET("/detail", api.InquiryConfig.GetSystemInquiryConfigDetail) + // 新增医生随访包配置 + followGroup.POST("", api.DoctorConfigFollowPackage.AddDoctorFollow) } } + + // 系统问诊配置 + systemGroup := inquiryGroup.Group("/system") + { + // 获取系统问诊配置列表-分页 + systemGroup.GET("", api.InquiryConfig.GetSystemInquiryConfigPage) + + // 系统问诊配置详情-id + systemGroup.GET("/:system_inquiry_config_id", api.InquiryConfig.GetSystemInquiryConfig) + + // 修改系统问诊配置 + systemGroup.PUT("/:system_inquiry_config_id", api.InquiryConfig.PutSystemInquiryConfig) + + // 系统问诊配置详情-条件 + systemGroup.GET("/detail", api.InquiryConfig.GetSystemInquiryConfigDetail) + } + + // 健康包管理 + healthGroup := inquiryGroup.Group("/health") + { + // 获取健康包列表-分页 + healthGroup.POST("/page", api.HealthPackage.GetHealthPackagePage) + + // 获取健康包列表-限制条数 + healthGroup.GET("/list", api.HealthPackage.GetHealthPackageList) + + // 获取健康包详情 + healthGroup.GET("/:package_id", api.HealthPackage.GetHealthPackage) + + // 修改健康包 + healthGroup.PUT("/:package_id", api.HealthPackage.PutHealthPackage) + + // 新增健康包 + healthGroup.POST("", api.HealthPackage.AddHealthPackage) + } } // 财务管理 @@ -655,6 +716,9 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 药品订单 orderGroup.POST("/product", api.Export.OrderProduct) + + // 服务包订单 + orderGroup.POST("/service", api.Export.OrderService) } // 处方 @@ -663,13 +727,23 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 处方 prescriptionGroup.POST("", api.Export.OrderPrescription) } + + // 药品 + productGroup := exportGroup.Group("/product") + { + // 系统药品 + productGroup.POST("", api.Export.Product) + } } // 商品管理 productGroup := adminGroup.Group("/product") { // 获取系统商品列表-分页 - productGroup.GET("", api.Product.GetProductPage) + productGroup.POST("/page", api.Product.GetProductPage) + + // 获取系统商品列表-限制条数 + productGroup.GET("/list", api.Product.GetProductList) // 系统商品详情 productGroup.GET("/:product_id", api.Product.GetProduct) @@ -696,4 +770,73 @@ func privateRouter(r *gin.Engine, api controller.Api) { platformGroup.GET("/list", api.Product.GetPlatformProductList) } } + + // 优惠卷管理 + couponGroup := adminGroup.Group("/coupon") + { + // 系统优惠卷管理 + systemGroup := couponGroup.Group("/system") + { + // 获取系统优惠卷列表-分页 + systemGroup.POST("/page", api.Coupon.GetSystemCouponPage) + + // 系统优惠卷详情 + systemGroup.GET("/:coupon_id", api.Coupon.GetSystemCoupon) + + // 新增系统优惠卷 + systemGroup.POST("", api.Coupon.AddSystemCoupon) + + // 修改系统优惠卷 + systemGroup.PUT("/:coupon_id", api.Coupon.PutSystemCoupon) + + // 修改系统优惠卷状态 + systemGroup.PUT("/status/:coupon_id", api.Coupon.PutSystemCouponStatus) + + // 发放系统优惠卷 + systemGroup.POST("/grant/:coupon_id", api.Coupon.GrantSystemCoupon) + } + + // 用户优惠卷管理 + userGroup := couponGroup.Group("/user") + { + // 获取用户优惠卷列表-分页 + userGroup.POST("/page", api.Coupon.GetUserCouponPage) + } + } + + // 基础数据 + basicGroup := adminGroup.Group("/basic") + { + // 地区管理 + areaGroup := basicGroup.Group("/area") + { + // 获取地区列表 + areaGroup.GET("", api.Area.GetAreaList) + + // 新增地区 + areaGroup.POST("", api.Basic.Area.AddArea) + + // 修改地区 + areaGroup.PUT("/:area_id", api.Basic.Area.PutArea) + } + + // 医院管理 + hospitalGroup := basicGroup.Group("/hospital") + { + // 获取医院列表-限制条数 + hospitalGroup.GET("", api.Hospital.GetHospitalList) + + // 获取医院列表-分页 + hospitalGroup.POST("/page", api.Hospital.GetHospitalPage) + + // 获取医院详情 + hospitalGroup.GET("/:hospital_id", api.Hospital.GetHospital) + + // 新增医院 + hospitalGroup.POST("", api.Hospital.AddHospital) + + // 修改医院 + hospitalGroup.PUT("/:hospital_id", api.Hospital.PutHospital) + } + } } diff --git a/api/service/HealthPackage.go b/api/service/HealthPackage.go new file mode 100644 index 0000000..82c3276 --- /dev/null +++ b/api/service/HealthPackage.go @@ -0,0 +1,207 @@ +package service + +import ( + "errors" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" + "strconv" +) + +type HealthPackageService struct { +} + +// GetHealthPackage 获取健康包 +func (r *HealthPackageService) GetHealthPackage(packageId int64) (g *dto.HealthPackageDto, err error) { + healthPackageDao := dao.HealthPackageDao{} + healthPackage, err := healthPackageDao.GetHealthPackagePreloadById(packageId) + if err != nil || healthPackage == nil { + return nil, errors.New(err.Error()) + } + + // 获取健康包-关联商品 + healthPackageProductDao := dao.HealthPackageProductDao{} + healthPackageProduct, err := healthPackageProductDao.GetHealthPackageProductByPackageId(packageId) + + // 处理返回值 + g = dto.GetHealthPackageDto(healthPackage) + + g.LoadHealthPackageProduct(healthPackageProduct) + + return g, nil +} + +// PutHealthPackage 修改健康包 +func (r *HealthPackageService) PutHealthPackage(packageId int64, req requests.PutHealthPackage) (bool, error) { + // 获取系统问诊配置 + healthPackageDao := dao.HealthPackageDao{} + healthPackage, err := healthPackageDao.GetHealthPackageById(packageId) + if err != nil || healthPackage == nil { + return false, errors.New("数据错误") + } + + var discountProductTotalAmount float64 + + // 验证商品 + productDao := dao.ProductDao{} + for _, product := range req.HealthPackageProduct { + productId, err := strconv.ParseInt(product.ProductId, 10, 64) + if err != nil { + return false, err + } + + // 获取商品数据 + _, err = productDao.GetProductById(productId) + if err != nil { + return false, errors.New("商品数据错误") + } + + discountProductTotalAmount = discountProductTotalAmount + product.DiscountProductPrice + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 修改系统问诊配置 + healthPackageData := make(map[string]interface{}) + if req.ServiceCount != healthPackage.ServiceCount { + healthPackageData["service_count"] = req.ServiceCount + } + + if req.MonthlyFrequency != healthPackage.MonthlyFrequency { + healthPackageData["monthly_frequency"] = req.MonthlyFrequency + } + + if req.EffectiveDays != healthPackage.EffectiveDays { + healthPackageData["effective_days"] = req.EffectiveDays + } + + if req.ServiceRate != healthPackage.ServiceRate { + healthPackageData["service_rate"] = req.ServiceRate + } + + if discountProductTotalAmount != healthPackage.DiscountProductTotalAmount { + healthPackageData["discount_product_total_amount"] = discountProductTotalAmount + } + + if len(healthPackageData) > 0 { + err = healthPackageDao.EditHealthPackage(tx, packageId, healthPackageData) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + } + + // 删除关联商品 + healthPackageProductDao := dao.HealthPackageProductDao{} + + maps := make(map[string]interface{}) + maps["package_id"] = healthPackage.PackageId + err = healthPackageProductDao.DeleteHealthPackageProduct(tx, maps) + if err != nil { + return false, err + } + + // 增加关联商品 + for _, product := range req.HealthPackageProduct { + productId, err := strconv.ParseInt(product.ProductId, 10, 64) + if err != nil { + return false, err + } + + healthPackageProduct := &model.HealthPackageProduct{ + PackageId: healthPackage.PackageId, + ProductId: productId, + ProductName: product.ProductName, + Quantity: product.Quantity, + DiscountProductPrice: product.DiscountProductPrice, + } + + healthPackageProduct, err = healthPackageProductDao.AddHealthPackageProduct(tx, healthPackageProduct) + if err != nil || healthPackageProduct == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + } + + tx.Commit() + return true, nil +} + +// AddHealthPackage 新增健康包 +func (r *HealthPackageService) AddHealthPackage(req requests.AddHealthPackage) (bool, error) { + var discountProductTotalAmount float64 + + // 验证商品 + productDao := dao.ProductDao{} + for _, product := range req.HealthPackageProduct { + productId, err := strconv.ParseInt(product.ProductId, 10, 64) + if err != nil { + return false, err + } + + // 获取商品数据 + _, err = productDao.GetProductById(productId) + if err != nil { + return false, errors.New("商品数据错误") + } + + discountProductTotalAmount = discountProductTotalAmount + product.DiscountProductPrice + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 新增医生问诊配置 + healthPackage := &model.HealthPackage{ + ServiceCount: req.ServiceCount, + MonthlyFrequency: req.MonthlyFrequency, + EffectiveDays: req.EffectiveDays, + ServiceRate: req.ServiceRate, + DiscountProductTotalAmount: discountProductTotalAmount, + } + + healthPackageDao := dao.HealthPackageDao{} + healthPackage, err := healthPackageDao.AddHealthPackage(tx, healthPackage) + if err != nil || healthPackage == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + healthPackageProductDao := dao.HealthPackageProductDao{} + for _, product := range req.HealthPackageProduct { + productId, err := strconv.ParseInt(product.ProductId, 10, 64) + if err != nil { + return false, err + } + + healthPackageProduct := &model.HealthPackageProduct{ + PackageId: healthPackage.PackageId, + ProductId: productId, + ProductName: product.ProductName, + Quantity: product.Quantity, + DiscountProductPrice: product.DiscountProductPrice, + } + + healthPackageProduct, err = healthPackageProductDao.AddHealthPackageProduct(tx, healthPackageProduct) + if err != nil || healthPackageProduct == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + } + + tx.Commit() + return true, nil +} diff --git a/api/service/InquiryConfig.go b/api/service/InquiryConfig.go index 27aa7e0..5319035 100644 --- a/api/service/InquiryConfig.go +++ b/api/service/InquiryConfig.go @@ -70,7 +70,7 @@ func (r *DoctorInquiryConfigService) HandleDoctorInquiryConfig(tx *gorm.DB, doct IsEnable: isEnable, LastEnableMethod: 2, WorkNumDay: workNumDay, - InquiryPrice: inquiryPrice, + InquiryPrice: &inquiryPrice, } adminUser, _ := doctorInquiryConfigDao.AddDoctorInquiryConfig(tx, m) @@ -89,7 +89,7 @@ func (r *DoctorInquiryConfigService) HandleDoctorInquiryConfig(tx *gorm.DB, doct data["work_num_day"] = workNumDay } - if d.InquiryPrice != inquiryPrice { + if d.InquiryPrice != &inquiryPrice { data["inquiry_price"] = inquiryPrice } @@ -109,11 +109,32 @@ func (r *DoctorInquiryConfigService) HandleDoctorInquiryConfig(tx *gorm.DB, doct } // GetDoctorInquiryConfig 医生问诊配置详情 -func (r *DoctorInquiryConfigService) GetDoctorInquiryConfig(inquiryConfigId int64) (res *dto.DoctorInquiryConfigDto, err error) { +func (r *DoctorInquiryConfigService) GetDoctorInquiryConfig(req requests.GetDoctorInquiryConfig) (res *dto.DoctorInquiryConfigDto, err error) { doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} // 获取医生问诊配置 - doctorInquiryConfig, err := doctorInquiryConfigDao.GetDoctorInquiryConfigById(inquiryConfigId) + maps := make(map[string]interface{}) + if req.InquiryConfigId != "" { + maps["inquiry_config_id"] = req.InquiryConfigId + } else { + if req.DoctorId != "" { + maps["doctor_id"] = req.DoctorId + } + + if req.InquiryType != nil { + maps["inquiry_type"] = req.InquiryType + } + + if req.InquiryMode != nil { + maps["inquiry_mode"] = req.InquiryMode + } + } + + if len(maps) <= 0 { + return nil, errors.New("参数错误") + } + + doctorInquiryConfig, err := doctorInquiryConfigDao.GetDoctorInquiryConfig(maps) if err != nil || doctorInquiryConfig == nil { return nil, errors.New("获取失败") } @@ -126,13 +147,13 @@ func (r *DoctorInquiryConfigService) GetDoctorInquiryConfig(inquiryConfigId int6 } // 获取医生医院数据 - hospitalDao := dao.Hospital{} + hospitalDao := dao.HospitalDao{} hospital, err := hospitalDao.GetHospitalById(userDoctor.HospitalID) // 获取系统问诊配置 systemInquiryConfigDao := dao.SystemInquiryConfigDao{} - maps := make(map[string]interface{}) + maps = make(map[string]interface{}) maps["inquiry_type"] = doctorInquiryConfig.InquiryType maps["inquiry_mode"] = doctorInquiryConfig.InquiryMode systemInquiryConfig, err := systemInquiryConfigDao.GetSystemInquiryConfig(maps) @@ -286,7 +307,7 @@ func (r *DoctorInquiryConfigService) PutDoctorInquiryConfig(inquiryConfigId int6 doctorInquiryConfigData["work_num_day"] = req.WorkNumDay } - if req.InquiryPrice != doctorInquiryConfig.InquiryPrice { + if req.InquiryPrice != *doctorInquiryConfig.InquiryPrice { doctorInquiryConfigData["inquiry_price"] = req.InquiryPrice } @@ -500,7 +521,7 @@ func (r *DoctorInquiryConfigService) AddDoctorInquiryConfig(req requests.AddDoct IsEnable: req.IsEnable, LastEnableMethod: 2, WorkNumDay: req.WorkNumDay, - InquiryPrice: req.InquiryPrice, + InquiryPrice: &req.InquiryPrice, } doctorInquiryConfig, err = doctorInquiryConfigDao.AddDoctorInquiryConfig(tx, doctorInquiryConfig) diff --git a/api/service/OrderInquiry.go b/api/service/OrderInquiry.go index 5adf853..e4fa26e 100644 --- a/api/service/OrderInquiry.go +++ b/api/service/OrderInquiry.go @@ -70,8 +70,13 @@ func (r *OrderInquiryService) CancelOrderInquiry(req requests.CancelOrderInquiry return false, errors.New("订单未支付,无需取消") } + // 检测问诊类型-服务包类型不允许取消 + if orderInquiry.InquiryMode == 8 || orderInquiry.InquiryMode == 9 { + return false, errors.New("服务包类型订单不允许退款") + } + // 检测退款金额 - if req.RefundAmount > orderInquiry.PaymentAmountTotal { + if *req.RefundAmount > orderInquiry.PaymentAmountTotal { return false, errors.New("退款金额不可超过实付金额") } @@ -100,14 +105,11 @@ func (r *OrderInquiryService) CancelOrderInquiry(req requests.CancelOrderInquiry } }() - // 问诊订单修改数据 - orderInquiryData := make(map[string]interface{}) - // 退款编号 - inquiryRefundNo := strconv.FormatInt(global.Snowflake.Generate().Int64(), 10) + refundNo := strconv.FormatInt(global.Snowflake.Generate().Int64(), 10) // 退款状态转换 - var inquiryRefundStatus int + var refundStatus int var successTime time.Time var refundId string @@ -116,9 +118,9 @@ func (r *OrderInquiryService) CancelOrderInquiry(req requests.CancelOrderInquiry refundRequest := weChat.RefundRequest{ TransactionId: orderInquiry.EscrowTradeNo, OutTradeNo: orderInquiry.InquiryNo, - OutRefundNo: inquiryRefundNo, + OutRefundNo: refundNo, Reason: "客服取消", - RefundAmount: int64(req.RefundAmount * 100), + RefundAmount: int64(*req.RefundAmount * 100), PaymentAmountTotal: int64(orderInquiry.PaymentAmountTotal * 100), NotifyUrl: config.C.Wechat.RefundNotifyDomain + config.C.Wechat.PatientInquiryRefundNotifyUrl, } @@ -136,18 +138,18 @@ func (r *OrderInquiryService) CancelOrderInquiry(req requests.CancelOrderInquiry if *refund.Status == "SUCCESS" { // 退款成功 - inquiryRefundStatus = 3 + refundStatus = 3 if refund.SuccessTime != nil { successTime = *refund.SuccessTime } } else if *refund.Status == "CLOSED" { // 退款关闭 - inquiryRefundStatus = 5 + refundStatus = 5 } else if *refund.Status == "PROCESSING" { // 退款处理中 - inquiryRefundStatus = 2 + refundStatus = 2 } else if *refund.Status == "ABNORMAL" { // 退款异常 @@ -168,26 +170,40 @@ func (r *OrderInquiryService) CancelOrderInquiry(req requests.CancelOrderInquiry } else { // 支付金额为0,模拟退款 refundId = "模拟退款:" + strconv.FormatInt(global.Snowflake.Generate().Int64(), 10) - inquiryRefundStatus = 3 + refundStatus = 3 successTime = time.Now() // 模拟退款时手动退还优惠卷 if orderInquiry.CouponAmountTotal > 0 { - res := ReturnInquiryCoupon(tx, orderInquiry.OrderInquiryId) - if !res { + orderService := OrderService{} + res, err := orderService.ReturnOrderCoupon(orderInquiry.OrderId, tx) + if err != nil || !res { + // 退还优惠卷失败 tx.Rollback() - return false, errors.New("退还优惠卷失败") + return false, err } } } - orderInquiryData["inquiry_refund_status"] = inquiryRefundStatus + // 修改订单为取消 + orderData := make(map[string]interface{}) + orderData["cancel_status"] = 1 + orderData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05") + orderData["cancel_remarks"] = req.CancelRemarks + + orderDao := dao.OrderDao{} + err = orderDao.EditOrderById(tx, orderInquiry.OrderId, orderData) + if err != nil { + tx.Rollback() + return false, errors.New("取消订单失败") + } + + // 修改问诊订单为取消 + orderInquiryData := make(map[string]interface{}) orderInquiryData["inquiry_status"] = 7 // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) orderInquiryData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05") // 订单取消时间 orderInquiryData["cancel_reason"] = 4 // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) orderInquiryData["cancel_remarks"] = req.CancelRemarks // 取消订单备注(自动添加) - - // 修改问诊订单退款状态 err = orderInquiryDao.EditOrderInquiryById(tx, orderInquiryId, orderInquiryData) if err != nil { tx.Rollback() @@ -195,18 +211,45 @@ func (r *OrderInquiryService) CancelOrderInquiry(req requests.CancelOrderInquiry } // 新增退款表 + orderRefund := &model.OrderRefund{ + OrderId: orderInquiry.OrderId, + PatientId: orderInquiry.PatientId, + OrderNo: orderInquiry.InquiryNo, + RefundNo: refundNo, + RefundId: refundId, + RefundStatus: refundStatus, + RefundTotal: *req.RefundAmount, + RefundReason: req.CancelRemarks, + } + + if refundStatus == 3 && !successTime.IsZero() { + orderRefund.SuccessTime = model.LocalTime(successTime) + } + + orderRefundDao := dao.OrderRefundDao{} + orderRefund, err = orderRefundDao.AddOrderRefund(tx, orderRefund) + if err != nil || orderRefund == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + // 新增问诊退款表 orderInquiryRefund := &model.OrderInquiryRefund{ PatientId: orderInquiry.PatientId, OrderInquiryId: orderInquiryId, InquiryNo: orderInquiry.InquiryNo, - InquiryRefundNo: inquiryRefundNo, + InquiryRefundNo: refundNo, RefundId: refundId, - InquiryRefundStatus: inquiryRefundStatus, - RefundTotal: req.RefundAmount, + InquiryRefundStatus: refundStatus, + RefundTotal: *req.RefundAmount, RefundReason: req.CancelRemarks, SuccessTime: model.LocalTime(successTime), } + if refundStatus == 3 && !successTime.IsZero() { + orderInquiryRefund.SuccessTime = model.LocalTime(successTime) + } + orderInquiryRefundDao := dao.OrderInquiryRefundDao{} orderInquiryRefund, err = orderInquiryRefundDao.AddOrderInquiryRefund(tx, orderInquiryRefund) if err != nil || orderInquiryRefund == nil { @@ -216,7 +259,7 @@ func (r *OrderInquiryService) CancelOrderInquiry(req requests.CancelOrderInquiry // 记录日志 orderOperationLog := &model.OrderOperationLog{ - OrderId: orderInquiry.OrderInquiryId, + OrderId: orderInquiry.OrderId, OrderNo: orderInquiry.InquiryNo, OrderType: 1, OperatorId: adminUserId, diff --git a/api/service/area.go b/api/service/area.go new file mode 100644 index 0000000..663e1df --- /dev/null +++ b/api/service/area.go @@ -0,0 +1,154 @@ +package service + +import ( + "errors" + "fmt" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" + "strconv" +) + +type AreaService struct{} + +// AddArea 新增地区 +func (r *AreaService) AddArea(req requests.AddArea) (bool, string, error) { + if *req.AreaType == 1 { + return false, "", errors.New("不可添加国家") + } + + // 检测上级是否存在 + maps := make(map[string]interface{}) + maps["parent_id"] = req.ParentId + if *req.AreaType == 4 { + maps["area_type"] = 3 + } + if *req.AreaType == 3 { + maps["area_type"] = 2 + } + + if *req.AreaType == 2 { + maps["area_type"] = 1 + } + + areaDao := dao.AreaDao{} + _, err := areaDao.GetAreaList(maps) + if err != nil { + return false, "", errors.New("上级地区错误") + } + + if len(req.AreaId) > 6 { + return false, "", errors.New("请输入正确地区编码") + } + + // 检测编码是否重复 + maps = make(map[string]interface{}) + maps["area_id"] = req.AreaId + areas, _ := areaDao.GetAreaList(maps) + if len(areas) >= 1 { + return false, "", errors.New("地区编码重复") + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + fmt.Println(r) + } + }() + + parentId, err := strconv.ParseInt(req.ParentId, 10, 64) + if err != nil { + tx.Rollback() + return false, "", errors.New("新增失败") + } + + areaId, err := strconv.ParseInt(req.AreaId, 10, 64) + if err != nil { + tx.Rollback() + return false, "", errors.New("新增失败") + } + + // 新增优惠卷表 + area := &model.Area{ + AreaId: areaId, + AreaName: req.AreaName, + ParentId: parentId, + Zip: req.Zip, + AreaType: *req.AreaType, + } + + area, err = areaDao.AddArea(tx, area) + if err != nil || area == nil { + tx.Rollback() + return false, "", errors.New(err.Error()) + } + + tx.Commit() + return true, fmt.Sprintf("%d", area.AreaId), nil +} + +// PutArea 修改地区 +func (r *AreaService) PutArea(areaId int, req requests.PutArea) (bool, error) { + areaDao := dao.AreaDao{} + area, err := areaDao.GetAreaById(areaId) + if err != nil { + return false, err + } + + if len(req.AreaId) > 6 { + return false, errors.New("请输入正确地区编码") + } + + // 检测编码是否重复 + maps := make(map[string]interface{}) + maps["area_id"] = req.AreaId + areas, err := areaDao.GetAreaList(maps) + if len(areas) > 1 { + return false, errors.New("地区编码重复") + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + fmt.Println(r) + } + }() + + areaData := make(map[string]interface{}) + + if req.AreaName != area.AreaName { + areaData["area_name"] = req.AreaName + } + + if req.Zip != "" { + if req.Zip != area.Zip { + areaData["zip"] = req.Zip + } + } + + if req.AreaId != "" { + areaId, err := strconv.ParseInt(req.AreaId, 10, 64) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + + areaData["area_id"] = areaId + } + + if len(areaData) > 0 { + err = areaDao.EditAreaById(tx, areaId, areaData) + if err != nil || area == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + } + + tx.Commit() + return true, nil +} diff --git a/api/service/coupon.go b/api/service/coupon.go new file mode 100644 index 0000000..806a48e --- /dev/null +++ b/api/service/coupon.go @@ -0,0 +1,787 @@ +package service + +import ( + "encoding/json" + "errors" + "fmt" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/extend/rabbitMq" + "hospital-admin-api/global" + "hospital-admin-api/utils" + "strconv" + "strings" + "time" +) + +type CouponService struct { +} + +// GetSystemCoupon 系统优惠卷详情 +func (r *CouponService) GetSystemCoupon(couponId int64) (g *dto.CouponDto, err error) { + couponDao := dao.CouponDao{} + coupon, err := couponDao.GetCouponById(couponId) + if err != nil || coupon == nil { + return nil, errors.New(err.Error()) + } + + // 获取优惠卷发放数据 + couponGrantDao := dao.CouponGrantDao{} + couponGrants, err := couponGrantDao.GetCouponGrantListPreloadByCouponId(coupon.CouponId) + + // 处理返回值 + g = dto.GetCouponDto(coupon) + + // 加载发放优惠卷数据 + if len(couponGrants) > 0 { + g = g.LoadCouponGrant(couponGrants) + } + + // 加载关联问诊类型 + if coupon.InquiryType != "" { + g.LoadInquiryType(coupon.InquiryType) + } + + return g, nil +} + +// AddSystemCoupon 新增系统优惠卷 +func (r *CouponService) AddSystemCoupon(req requests.AddSystemCoupon) (bool, error) { + // 满减 + if *req.CouponType == 2 { + if *req.WithAmount == 0 { + return false, errors.New("请填入符合满减标准金额") + } + } + + // 数量 + if *req.CouponType == 3 { + if *req.MinUsableNumber == 0 { + return false, errors.New("请填入单商品最小可使用数量") + } + } + + // 发放对象-近期消费 + if *req.DistributionObject == 4 { + if *req.DistributionWithDay == 0 { + return false, errors.New("请填入发放关联天数") + } + } + + // 适用范围-全场通用 + if *req.ApplicationScope == 1 { + // 满减 + if *req.CouponType == 2 { + if *req.WithAmount == 0 { + return false, errors.New("请填入符合满减标准金额") + } + + if *req.WithAmount > *req.CouponPrice { + return false, errors.New("满减标准金额不可超过优惠卷金额") + } + } + + // 数量 + if *req.CouponType == 3 { + if *req.MinUsableNumber == 0 { + return false, errors.New("请填入单商品最小可使用数量") + } + } + } + + // 适用范围-问诊 + if *req.ApplicationScope == 2 { + // 关联问诊类型 + if len(req.InquiryType) == 0 { + return false, errors.New("请填入关联问诊类型") + } + } + + // 适用范围-按品牌适用 + if *req.ApplicationScope == 3 { + // 关联品牌id + if req.BrandId == nil { + return false, errors.New("请填入关联品牌") + } + } + + // 适用范围-单品使用 + if *req.ApplicationScope == 5 { + // 关联商品id + if len(req.ProductId) == 0 { + return false, errors.New("请填入关联商品") + } + + productDao := dao.ProductDao{} + for _, s := range req.ProductId { + // 将 id 转换为 int64 类型 + productId, err := strconv.ParseInt(s, 10, 64) + if err != nil { + return false, errors.New("新增失败") + } + + _, err = productDao.GetProductById(productId) + if err != nil { + return false, errors.New("存在错误商品") + } + } + } + + // 有效类型-绝对时效 + if *req.ValidType == 1 { + if req.ValidStartTime == nil { + return false, errors.New("请填入开始使用时间") + } + + if req.ValidEndTime == nil { + return false, errors.New("请填入结束使用时间") + } + } + + // 有效类型-相对时效 + if *req.ValidType == 2 { + if req.ValidDays == nil { + return false, errors.New("请填入有效天数") + } + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + fmt.Println(r) + } + }() + + // 新增优惠卷表 + coupon := &model.Coupon{ + CouponName: req.CouponName, + CouponIcon: utils.AddOssDomain(req.CouponIcon), + CouponClient: *req.CouponClient, + CouponType: *req.CouponType, + CouponStatus: *req.CouponClient, + DistributionObject: *req.DistributionObject, + ApplicationScope: *req.ApplicationScope, + IsMutex: req.IsMutex, + IsDisplay: *req.IsDisplay, + CouponCount: *req.CouponCount, + CouponPrice: *req.CouponPrice, + ValidType: *req.ValidType, + IsPopup: *req.IsPopup, + } + + // 关联品牌id + if req.BrandId != nil { + // 将 id 转换为 int64 类型 + brandId, err := strconv.ParseInt(*req.BrandId, 10, 64) + if err != nil { + tx.Rollback() + return false, errors.New("新增失败") + } + + coupon.BrandId = &brandId + } + + // 时间区间 + if req.ValidStartTime != nil { + // 获取本地时区 + location, err := time.LoadLocation("Local") + if err != nil { + tx.Rollback() + return false, errors.New("新增失败") + } + + t, err := time.ParseInLocation("2006-01-02 15:04:05", *req.ValidStartTime, location) + if err != nil { + tx.Rollback() + return false, errors.New("新增失败") + } + + validStartTime := model.LocalTime(t) + + coupon.ValidStartTime = &validStartTime + } + + if req.ValidEndTime != nil { + // 获取本地时区 + location, err := time.LoadLocation("Local") + if err != nil { + tx.Rollback() + return false, errors.New("新增失败") + } + + t, err := time.ParseInLocation("2006-01-02 15:04:05", *req.ValidEndTime, location) + if err != nil { + tx.Rollback() + return false, errors.New("新增失败") + } + + ValidEndTime := model.LocalTime(t) + + coupon.ValidEndTime = &ValidEndTime + } + + // 关联商品id + if req.ProductId != nil { + productId := strings.Join(req.ProductId, ",") + if productId != "" { + coupon.ProductId = productId + } + } + + // 关联问诊类型 + if len(req.InquiryType) > 0 { + coupon.InquiryType = strings.Join(req.InquiryType, ",") + } + + // 发放关联天数 + if req.DistributionWithDay != nil { + coupon.DistributionWithDay = *req.DistributionWithDay + } + + // 发放关联天数 + if req.DistributionWithDay != nil { + coupon.DistributionWithDay = *req.DistributionWithDay + } + + // 单商品最小可使用数量 + if req.MinUsableNumber != nil { + coupon.MinUsableNumber = req.MinUsableNumber + } + + // 符合满减标准金额 + if req.WithAmount != nil { + coupon.WithAmount = *req.WithAmount + } + + // 有效天数 + if req.ValidDays != nil { + coupon.ValidDays = *req.ValidDays + } + + // 再次发放间隔天数 + if req.ReissueIntervalDays != nil { + coupon.ReissueIntervalDays = *req.ReissueIntervalDays + } + + // 允许再次发放 + if req.IsReissuableAfterExpire != nil { + coupon.IsReissuableAfterExpire = *req.IsReissuableAfterExpire + } + + // 优惠卷描述 + if req.CouponDesc != nil { + coupon.CouponDesc = *req.CouponDesc + } + + couponDao := dao.CouponDao{} + coupon, err := couponDao.AddCoupon(tx, coupon) + if err != nil || coupon == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + // 增加优惠卷过期队列 + if coupon.ValidType == 1 { + validEndTime := time.Time(*coupon.ValidEndTime) + + // 计算当天的结束时间 + now := time.Now() + year, month, day := now.Date() + location := now.Location() + endOfDay := time.Date(year, month, day, 23, 59, 59, 0, location) + if validEndTime.Before(endOfDay) { + // 需添加队列 + // 建立队列连接 + rabbitMQ, err := rabbitMq.NewRabbitMQClient() + if err != nil { + tx.Rollback() + return false, errors.New("发放失败") + } + + defer rabbitMQ.Close() + + data := make(map[string]interface{}) + data["coupon_id"] = fmt.Sprintf("%d", coupon.CouponId) + + delay := validEndTime.Sub(now) + + if delay < 10 { + delay = 10 * time.Second + } + + err = rabbitMQ.PublishWithDelay("coupon.expired.delay.queue", "amqp.delay.direct", "CouponExpired", data, delay) + if err != nil { + tx.Rollback() + return false, err + } + } + } + + tx.Commit() + return true, nil +} + +// PutSystemCoupon 修改系统优惠卷 +func (r *CouponService) PutSystemCoupon(couponId int64, req requests.PutSystemCoupon) (bool, error) { + couponDao := dao.CouponDao{} + coupon, err := couponDao.GetCouponById(couponId) + if err != nil { + return false, err + } + + if coupon.CouponStatus != 1 { + return false, errors.New("优惠卷非正常状态,不支持更改") + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + couponData := make(map[string]interface{}) + + // 优惠卷名称 + if req.CouponName != coupon.CouponName { + couponData["coupon_name"] = req.CouponName + } + + // 头像 + if req.CouponIcon != "" { + if req.CouponIcon != coupon.CouponIcon { + couponData["coupon_icon"] = req.CouponIcon + } + } + + // 发放对象 + if req.DistributionObject != nil { + if *req.DistributionObject != coupon.DistributionObject { + couponData["distribution_object"] = req.DistributionObject + } + } + + // 关联问诊类型 + if coupon.ApplicationScope == 2 { + if len(req.InquiryType) > 0 { + inquiryType := strings.Join(req.InquiryType, ",") + if inquiryType != coupon.InquiryType { + couponData["inquiry_type"] = inquiryType + } + } + } + + // 关联品牌id + if coupon.ApplicationScope == 3 { + // 将 id 转换为 int64 类型 + brandId, err := strconv.ParseInt(*req.BrandId, 10, 64) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + + if &brandId != coupon.BrandId { + couponData["brand_id"] = req.BrandId + } + } + + // 是否互斥 + if req.IsMutex != nil { + if req.IsMutex != coupon.IsMutex { + couponData["is_mutex"] = req.IsMutex + } + } + + // 是否展示 + if req.IsDisplay != nil { + if *req.IsDisplay != coupon.IsDisplay { + couponData["is_display"] = req.IsDisplay + } + } + + // 发放关联天数 + if coupon.DistributionObject == 4 { + if req.DistributionWithDay != nil { + if *req.DistributionWithDay != coupon.DistributionWithDay { + couponData["distribution_with_day"] = req.DistributionWithDay + } + } + } + + // 单商品最小可使用数量 + if coupon.ApplicationScope == 1 && coupon.CouponType == 3 { + if req.MinUsableNumber != nil { + couponData["min_usable_number"] = req.MinUsableNumber + } + } + + // 发放数量 + if req.CouponCount != nil { + if *req.CouponCount != coupon.CouponCount { + if *req.CouponCount <= coupon.CouponTakeCount { + tx.Rollback() + return false, errors.New("发放数量,不可低于已发放数量") + } + + couponData["coupon_count"] = req.CouponCount + } + } + + // 优惠卷金额 + if req.CouponPrice != nil { + if *req.CouponPrice != coupon.CouponPrice { + couponData["coupon_price"] = req.CouponPrice + } + } + + // 关联商品id + if len(req.ProductId) > 0 { + productId := strings.Join(req.ProductId, ",") + + if productId != coupon.ProductId { + productDao := dao.ProductDao{} + for _, s := range req.ProductId { + // 将 id 转换为 int64 类型 + productId, err := strconv.ParseInt(s, 10, 64) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + + _, err = productDao.GetProductById(productId) + if err != nil { + tx.Rollback() + return false, errors.New("存在错误商品") + } + } + + couponData["product_id"] = productId + } + } + + // 确认收货后的再次发放间隔天数 + if req.ReissueIntervalDays != nil { + if *req.ReissueIntervalDays != coupon.ReissueIntervalDays { + couponData["reissue_interval_days"] = req.ReissueIntervalDays + } + } + + // 过期之后是否允许再次发放 + if req.IsReissuableAfterExpire != nil { + if *req.IsReissuableAfterExpire != coupon.IsReissuableAfterExpire { + couponData["is_reissuable_after_expire"] = req.IsReissuableAfterExpire + } + } + + // 是否首页弹窗 + if *req.IsPopup != coupon.IsPopup { + couponData["is_popup"] = req.IsPopup + } + + // 优惠卷描述 + if req.CouponDesc != nil { + if *req.CouponDesc != coupon.CouponDesc { + couponData["coupon_desc"] = req.CouponDesc + } + } + + err = couponDao.EditCouponById(tx, coupon.CouponId, couponData) + if err != nil || coupon == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + // 新增队列 + + tx.Commit() + return true, nil +} + +// PutSystemCouponStatus 修改系统优惠卷状态 +func (r *CouponService) PutSystemCouponStatus(couponId int64, req requests.PutSystemCouponStatus) (bool, error) { + couponDao := dao.CouponDao{} + coupon, err := couponDao.GetCouponById(couponId) + if err != nil { + return false, err + } + + // 状态未变 + if coupon.CouponStatus == req.CouponStatus { + return true, nil + } + + if coupon.CouponStatus == 2 { + return false, errors.New("优惠卷已强制失效,无法再次操作") + } + + if coupon.CouponStatus == 3 { + return false, errors.New("优惠卷已结束,无法再次操作") + } + + if coupon.CouponStatus == 4 { + return false, errors.New("优惠卷已删除,无法再次操作") + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + couponData := make(map[string]interface{}) + couponData["coupon_status"] = req.CouponStatus + + err = couponDao.EditCouponById(tx, coupon.CouponId, couponData) + if err != nil || coupon == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + tx.Commit() + return true, nil +} + +// GrantSystemCoupon 发放系统优惠卷 +func (r *CouponService) GrantSystemCoupon(couponId, adminUserId int64, req requests.GrantSystemCoupon) (bool, error) { + if req.Type == 2 { + return false, errors.New("暂时只支持具体用户发放") + } + + couponDao := dao.CouponDao{} + coupon, err := couponDao.GetCouponById(couponId) + if err != nil { + return false, err + } + + if coupon.CouponStatus != 1 { + return false, errors.New("优惠卷非正常状态,不支持发放") + } + + // 检测优惠卷剩余数量 + remainingQuantity := coupon.CouponCount - coupon.CouponTakeCount + if remainingQuantity <= 0 { + return false, errors.New("优惠卷数量不足,无法发放") + } + + // 检测优惠卷可发放数量 + if req.TotalQuantity > remainingQuantity { + return false, errors.New("优惠卷数量不足,无法发放") + } + + // 检测优惠卷过期时间 + now := time.Now() + if coupon.ValidType == 1 { + // 1:绝对时效 + validStartTime := time.Time(*coupon.ValidStartTime) + if now.Before(validStartTime) { + return false, errors.New("优惠卷还未启用") + } + + validEndTime := time.Time(*coupon.ValidEndTime) + if now.Add(time.Minute * 10).After(validEndTime) { + return false, errors.New("优惠卷即将过期,不支持发放") + } + } + + // 获取优惠卷发放记录表 + couponGrantDao := dao.CouponGrantDao{} + + maps := make(map[string]interface{}) + maps["coupon_id"] = coupon.CouponId + maps["grant_result"] = 2 + couponGrants, _ := couponGrantDao.GetCouponGrantList(maps) + if len(couponGrants) > 0 { + return false, errors.New("请等待上次发放结束后再执行此操作") + } + + // 将 id 转换为 int64 类型 + userId, err := strconv.ParseInt(req.UserId, 10, 64) + if err != nil { + return false, errors.New("发放失败") + } + + userDao := dao.UserDao{} + user, _ := userDao.GetUserById(userId) + if user == nil { + return false, errors.New("用户错误") + } + + // 获取患者数据 + userPatientDao := dao.UserPatientDao{} + userPatient, _ := userPatientDao.GetUserPatientByUserId(userId) + if userPatient == nil { + return false, errors.New("用户错误") + } + + // 检测用户是否已领取该优惠卷 + userCouponDao := dao.UserCouponDao{} + + //// 废弃,不进行检测是否已发放 + //maps = make(map[string]interface{}) + //maps["user_id"] = user.UserId + //maps["coupon_id"] = coupon.CouponId + //maps["user_coupon_status"] = 0 + //userCoupons, _ := userCouponDao.GetUserCouponList(maps) + //if len(userCoupons) >= req.SingleQuantity { + // return false, errors.New("用户已有该优惠卷") + //} + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 增加优惠卷发放数量 + err = couponDao.Inc(tx, couponId, "coupon_take_count", req.SingleQuantity) + if err != nil { + tx.Rollback() + return false, errors.New("发放失败") + } + + // 检测优惠卷是否全部发放完毕 + if (req.TotalQuantity - remainingQuantity) == 0 { + maps := make(map[string]interface{}) + maps["coupon_status"] = 3 + err := couponDao.EditCouponById(tx, coupon.CouponId, maps) + if err != nil { + tx.Rollback() + return false, errors.New("发放失败") + } + } + + // 发放优惠卷 + for i := 0; i < req.SingleQuantity; i++ { + // 添加用户优惠卷表 + UserCouponModel := &model.UserCoupon{ + UserId: user.UserId, + PatientId: userPatient.PatientId, + CouponId: couponId, + CouponUseDate: nil, + } + + // 有效类型(1:绝对时效,xxx-xxx时间段有效 2:相对时效 n天内有效) + if coupon.ValidType == 1 { + UserCouponModel.ValidStartTime = time.Time(*coupon.ValidStartTime) + UserCouponModel.ValidEndTime = time.Time(*coupon.ValidEndTime) + } + + if coupon.ValidType == 2 { + UserCouponModel.ValidStartTime = now + UserCouponModel.ValidEndTime = now.AddDate(0, 0, coupon.ValidDays) + } + + userCoupon, _ := userCouponDao.AddUserCoupon(tx, UserCouponModel) + if userCoupon == nil { + tx.Rollback() + return false, errors.New("发放失败") + } + + // 添加弹窗表 + if coupon.IsPopup == 1 { + popupModel := &model.Popup{ + UserId: user.UserId, + AppType: 1, + ClientType: 1, + PopupType: 2, + PopupTitle: "红包福利", + PopupContent: "", + } + + popupContent := make(map[string]interface{}) + popupContent["user_coupon_id"] = fmt.Sprintf("%d", userCoupon.UserCouponId) + popupContent["coupon_price"] = coupon.CouponPrice + popupContent["application_scope"] = coupon.ApplicationScope + popupContent["inquiry_type"] = coupon.InquiryType + popupContent["valid_type"] = coupon.ValidType + popupContent["valid_days"] = coupon.ValidDays + popupContent["valid_start_time"] = coupon.ValidStartTime + popupContent["valid_end_time"] = coupon.ValidEndTime + + popupContentData, err := json.Marshal(popupContent) + if err != nil { + tx.Rollback() + return false, errors.New("发放失败") + } + + popupModel.PopupContent = string(popupContentData) + + popupDao := dao.PopupDao{} + popup, _ := popupDao.AddPopup(tx, popupModel) + if popup == nil { + tx.Rollback() + return false, errors.New("发放失败") + } + } + + // 增加优惠卷过期队列 + // 计算当天的结束时间 + year, month, day := now.Date() + location := now.Location() + endOfDay := time.Date(year, month, day, 23, 59, 59, 0, location) + if userCoupon.ValidEndTime.Before(endOfDay) { + // 需添加队列 + // 建立队列连接 + rabbitMQ, err := rabbitMq.NewRabbitMQClient() + if err != nil { + tx.Rollback() + return false, errors.New("发放失败") + } + + defer rabbitMQ.Close() + + data := make(map[string]interface{}) + data["user_coupon_id"] = fmt.Sprintf("%d", userCoupon.UserCouponId) + + delay := userCoupon.ValidEndTime.Sub(time.Now()) + + if delay < 10 { + delay = 10 * time.Second + } + + err = rabbitMQ.PublishWithDelay("user.coupon.expired.delay.queue", "amqp.delay.direct", "UserCouponExpired", data, delay) + if err != nil { + tx.Rollback() + return false, err + } + } + + go func() { + // 发送通知 + res, _ := PatientDistributeCoupon(coupon.CouponName, user.UserId) + if !res { + utils.LogJsonErr("CouponService-GrantSystemCoupon", "优惠卷通知发送失败") + } + }() + } + + // 添加优惠卷发放记录表 + couponGrantModel := &model.CouponGrant{ + CouponId: coupon.CouponId, + GrantType: req.Type, + UserId: userId, + TotalQuantity: req.TotalQuantity, + GrantQuantity: req.SingleQuantity, + GrantResult: 1, + StopReason: "", + AdminUserId: adminUserId, + } + + _, err = couponGrantDao.AddCouponGrant(tx, couponGrantModel) + if err != nil { + tx.Rollback() + return false, err + } + + tx.Commit() + return true, nil +} diff --git a/api/service/doctorConfigFollowPackage.go b/api/service/doctorConfigFollowPackage.go new file mode 100644 index 0000000..55c50ba --- /dev/null +++ b/api/service/doctorConfigFollowPackage.go @@ -0,0 +1,326 @@ +package service + +import ( + "errors" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" + "strconv" +) + +type DoctorConfigFollowPackageService struct { +} + +// GetDoctorFollow 医生随访包配置详情 +func (r *DoctorConfigFollowPackageService) GetDoctorFollow(followPackageId int64) (res *dto.DoctorConfigFollowPackageDto, err error) { + DoctorConfigFollowPackageDao := dao.DoctorConfigFollowPackageDao{} + + DoctorConfigFollowPackage, err := DoctorConfigFollowPackageDao.GetDoctorConfigFollowPackageById(followPackageId) + if err != nil || DoctorConfigFollowPackage == nil { + return nil, errors.New("获取失败") + } + + // 获取医生数据 + userDoctorDao := dao.UserDoctorDao{} + userDoctor, err := userDoctorDao.GetUserDoctorById(DoctorConfigFollowPackage.DoctorId) + if err != nil || userDoctor == nil { + return nil, errors.New("获取失败") + } + + // 获取医生医院数据 + hospitalDao := dao.HospitalDao{} + hospital, err := hospitalDao.GetHospitalById(userDoctor.HospitalID) + + // 获取随访包列表数据 + doctorConfigFollowPackageItemDao := dao.DoctorConfigFollowPackageItemDao{} + doctorConfigFollowPackageItem, err := doctorConfigFollowPackageItemDao.GetDoctorConfigFollowPackageItemListByFollowPackageId(DoctorConfigFollowPackage.FollowPackageId) + if err != nil || doctorConfigFollowPackageItem == nil { + return nil, errors.New("获取失败") + } + + // 获取医生问诊配置 + doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} + maps := make(map[string]interface{}) + maps["doctor_id"] = DoctorConfigFollowPackage.DoctorId + maps["inquiry_type"] = 1 + maps["inquiry_mode"] = 9 + doctorInquiryConfig, err := doctorInquiryConfigDao.GetDoctorInquiryConfig(maps) + if err != nil { + return nil, errors.New("获取失败") + } + + // 处理返回值 + res = dto.GetDoctorConfigFollowPackageDto(DoctorConfigFollowPackage) + + // 加载医生数据 + res.LoadUserDoctor(userDoctor) + + // 加载医生医院 + if hospital != nil { + res.LoadUserDoctorHospital(hospital) + } + + // 加载医生随访包列表配置 + res.LoadDoctorConfigFollowPackageItem(doctorConfigFollowPackageItem) + + // 获取医生问诊配置 + res.LoadDoctorInquiryConfig(doctorInquiryConfig) + + return res, nil +} + +// PutDoctorFollow 修改医生随访包配置 +func (r *DoctorConfigFollowPackageService) PutDoctorFollow(followPackageId int64, req requests.PutDoctorFollow) (bool, error) { + doctorConfigFollowPackageDao := dao.DoctorConfigFollowPackageDao{} + DoctorConfigFollowPackage, err := doctorConfigFollowPackageDao.GetDoctorConfigFollowPackageById(followPackageId) + if err != nil || DoctorConfigFollowPackage == nil { + return false, errors.New("修改失败") + } + + // 获取医生数据 + userDoctorDao := dao.UserDoctorDao{} + userDoctor, err := userDoctorDao.GetUserDoctorById(DoctorConfigFollowPackage.DoctorId) + if err != nil || userDoctor == nil { + return false, errors.New("医生错误") + } + + if userDoctor.IdcardStatus != 1 { + return false, errors.New("请先进行实名认证") + } + + if userDoctor.IdenAuthStatus != 1 { + return false, errors.New("请先进行身份认证") + } + + if userDoctor.IsBindBank != 1 { + return false, errors.New("请先进行绑定结算银行卡") + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + doctorConfigFollowPackageData := make(map[string]interface{}) + + if *req.MonthlyFrequency != DoctorConfigFollowPackage.MonthlyFrequency { + doctorConfigFollowPackageData["monthly_frequency"] = req.MonthlyFrequency + } + + if *req.ServiceRounds != DoctorConfigFollowPackage.ServiceRounds { + doctorConfigFollowPackageData["service_rounds"] = req.ServiceRounds + } + + if len(doctorConfigFollowPackageData) > 0 { + err := doctorConfigFollowPackageDao.EditDoctorConfigFollowPackageById(tx, followPackageId, doctorConfigFollowPackageData) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + } + + // 处理问诊配置 + // 获取医生问诊配置 + doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} + maps := make(map[string]interface{}) + maps["doctor_id"] = DoctorConfigFollowPackage.DoctorId + maps["inquiry_type"] = 1 + maps["inquiry_mode"] = 9 + doctorInquiryConfig, _ := doctorInquiryConfigDao.GetDoctorInquiryConfig(maps) + if doctorInquiryConfig == nil { + // 新增医生问诊配置 + doctorInquiryConfig = &model.DoctorInquiryConfig{ + DoctorId: DoctorConfigFollowPackage.DoctorId, + InquiryType: 1, + InquiryMode: 9, + IsEnable: *req.IsEnable, + LastEnableMethod: 2, + WorkNumDay: 0, + InquiryPrice: nil, + } + + doctorInquiryConfig, err = doctorInquiryConfigDao.AddDoctorInquiryConfig(tx, doctorInquiryConfig) + if err != nil || doctorInquiryConfig == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + } else { + // 修改医生问诊配置 + doctorInquiryConfigData := make(map[string]interface{}) + if *req.IsEnable != doctorInquiryConfig.IsEnable { + doctorInquiryConfigData["is_enable"] = req.IsEnable + if *req.IsEnable == 1 { + doctorInquiryConfigData["last_enable_method"] = 2 + } + } + + if len(doctorInquiryConfigData) > 0 { + err = doctorInquiryConfigDao.EditDoctorInquiryConfigById(tx, doctorInquiryConfig.InquiryConfigId, doctorInquiryConfigData) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + } + } + + // 删除随访包明细 + maps = make(map[string]interface{}) + maps["follow_package_id"] = DoctorConfigFollowPackage.FollowPackageId + + doctorConfigFollowPackageItemDao := dao.DoctorConfigFollowPackageItemDao{} + err = doctorConfigFollowPackageItemDao.DeleteDoctorConfigFollowPackageItem(tx, maps) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + + // 处理随访包明细 + for _, item := range req.DoctorConfigFollowPackageItem { + if item.ServicePrice < 10 || item.ServicePrice > 9999 { + tx.Rollback() + return false, errors.New("服务价格只允许设置在10-9999范围内") + } + + if item.ServicePeriod != 30 && item.ServicePeriod != 90 && item.ServicePeriod != 180 && item.ServicePeriod != 360 { + tx.Rollback() + return false, errors.New("服务周期错误") + } + + doctorConfigFollowPackageItem := &model.DoctorConfigFollowPackageItem{ + FollowPackageId: DoctorConfigFollowPackage.FollowPackageId, + ServicePeriod: item.ServicePeriod, + ServicePrice: item.ServicePrice, + } + + doctorConfigFollowPackageItem, err := doctorConfigFollowPackageItemDao.AddDoctorConfigFollowPackageItem(tx, doctorConfigFollowPackageItem) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + } + + tx.Commit() + return true, nil +} + +// AddDoctorFollow 新增医生随访包配置 +func (r *DoctorConfigFollowPackageService) AddDoctorFollow(req requests.AddDoctorFollow) (bool, error) { + doctorId, err := strconv.ParseInt(req.DoctorId, 10, 64) + if err != nil { + return false, errors.New("修改失败") + } + + // 获取医生数据 + userDoctorDao := dao.UserDoctorDao{} + userDoctor, err := userDoctorDao.GetUserDoctorById(doctorId) + if err != nil || userDoctor == nil { + return false, errors.New("医生错误") + } + + if userDoctor.IdcardStatus != 1 { + return false, errors.New("请先进行实名认证") + } + + if userDoctor.IdenAuthStatus != 1 { + return false, errors.New("请先进行身份认证") + } + + if userDoctor.IsBindBank != 1 { + return false, errors.New("请先进行绑定结算银行卡") + } + + DoctorConfigFollowPackageDao := dao.DoctorConfigFollowPackageDao{} + + maps := make(map[string]interface{}) + maps["doctor_id"] = doctorId + DoctorConfigFollowPackage, err := DoctorConfigFollowPackageDao.GetDoctorConfigFollowPackage(maps) + if DoctorConfigFollowPackage != nil { + return false, errors.New("该医生存在随访包配置,请勿重复添加") + } + + // 获取专家图文问诊价格 + maps = make(map[string]interface{}) + maps["doctor_id"] = req.DoctorId + maps["inquiry_type"] = 1 + maps["inquiry_mode"] = 1 + + doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} + doctorInquiryConfig, err := doctorInquiryConfigDao.GetDoctorInquiryConfig(maps) + if err != nil && *req.IsEnable == 1 { + return false, errors.New("本服务需设置图文问诊的价格,才可开启") + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 创建医生随访包 + DoctorConfigFollowPackage = &model.DoctorConfigFollowPackage{ + DoctorId: doctorId, + MonthlyFrequency: *req.MonthlyFrequency, + ServiceRounds: *req.ServiceRounds, + } + + DoctorConfigFollowPackage, err = DoctorConfigFollowPackageDao.AddDoctorConfigFollowPackage(tx, DoctorConfigFollowPackage) + if err != nil || DoctorConfigFollowPackage == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + // 处理随访包明细 + doctorConfigFollowPackageItemDao := dao.DoctorConfigFollowPackageItemDao{} + for _, item := range req.DoctorConfigFollowPackageItem { + if item.ServicePrice < 10 || item.ServicePrice > 9999 { + tx.Rollback() + return false, errors.New("服务价格只允许设置在10-9999范围内") + } + + if item.ServicePeriod != 30 && item.ServicePeriod != 90 && item.ServicePeriod != 180 && item.ServicePeriod != 360 { + tx.Rollback() + return false, errors.New("服务周期错误") + } + + doctorConfigFollowPackageItem := &model.DoctorConfigFollowPackageItem{ + FollowPackageId: DoctorConfigFollowPackage.FollowPackageId, + ServicePeriod: item.ServicePeriod, + ServicePrice: item.ServicePrice, + } + + doctorConfigFollowPackageItem, err := doctorConfigFollowPackageItemDao.AddDoctorConfigFollowPackageItem(tx, doctorConfigFollowPackageItem) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + } + + // 增加医生问诊配置 + if *req.IsEnable == 1 { + doctorInquiryConfig = &model.DoctorInquiryConfig{ + DoctorId: doctorId, + InquiryType: 1, + InquiryMode: 9, + IsEnable: *req.IsEnable, + LastEnableMethod: 2, + WorkNumDay: 0, + InquiryPrice: nil, + } + + doctorInquiryConfig, err = doctorInquiryConfigDao.AddDoctorInquiryConfig(tx, doctorInquiryConfig) + if err != nil || doctorInquiryConfig == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + } + + tx.Commit() + return true, nil +} diff --git a/api/service/doctorConfigHealthPackage.go b/api/service/doctorConfigHealthPackage.go new file mode 100644 index 0000000..b135da8 --- /dev/null +++ b/api/service/doctorConfigHealthPackage.go @@ -0,0 +1,333 @@ +package service + +import ( + "errors" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" + "strconv" +) + +type DoctorConfigHealthPackageService struct { +} + +// GetDoctorHealth 医生健康包配置详情 +func (r *DoctorConfigHealthPackageService) GetDoctorHealth(healthPackageId int64) (res *dto.DoctorConfigHealthPackageDto, err error) { + doctorConfigHealthPackageDao := dao.DoctorConfigHealthPackageDao{} + + doctorConfigHealthPackage, err := doctorConfigHealthPackageDao.GetDoctorConfigHealthPackageById(healthPackageId) + if err != nil || doctorConfigHealthPackage == nil { + return nil, errors.New("获取失败") + } + + // 获取医生数据 + userDoctorDao := dao.UserDoctorDao{} + userDoctor, err := userDoctorDao.GetUserDoctorById(doctorConfigHealthPackage.DoctorId) + if err != nil || userDoctor == nil { + return nil, errors.New("获取失败") + } + + // 获取服务包数据 + healthPackageDao := dao.HealthPackageDao{} + healthPackage, err := healthPackageDao.GetHealthPackageById(doctorConfigHealthPackage.PackageId) + if err != nil || healthPackage == nil { + return nil, errors.New("获取失败") + } + + // 获取医生医院数据 + hospitalDao := dao.HospitalDao{} + hospital, err := hospitalDao.GetHospitalById(userDoctor.HospitalID) + + // 获取医生问诊配置 + doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} + maps := make(map[string]interface{}) + maps["doctor_id"] = doctorConfigHealthPackage.DoctorId + maps["inquiry_type"] = 1 + maps["inquiry_mode"] = 8 + doctorInquiryConfig, err := doctorInquiryConfigDao.GetDoctorInquiryConfig(maps) + if err != nil { + return nil, errors.New("获取失败") + } + + // 处理返回值 + res = dto.GetDoctorConfigHealthPackageDto(doctorConfigHealthPackage) + + // 加载医生数据 + res.LoadUserDoctor(userDoctor) + + // 加载医生医院 + if hospital != nil { + res.LoadUserDoctorHospital(hospital) + } + + if healthPackage != nil { + res.LoadHealthPackage(healthPackage) + } + + // 获取医生问诊配置 + res.LoadDoctorInquiryConfig(doctorInquiryConfig) + + return res, nil +} + +// PutDoctorHealth 修改医生健康包配置 +func (r *DoctorConfigHealthPackageService) PutDoctorHealth(healthPackageId int64, req requests.PutDoctorHealth) (bool, error) { + doctorConfigHealthPackageDao := dao.DoctorConfigHealthPackageDao{} + + doctorConfigHealthPackage, err := doctorConfigHealthPackageDao.GetDoctorConfigHealthPackageById(healthPackageId) + if err != nil || doctorConfigHealthPackage == nil { + return false, errors.New("修改失败") + } + + // 获取医生数据 + userDoctorDao := dao.UserDoctorDao{} + userDoctor, err := userDoctorDao.GetUserDoctorById(doctorConfigHealthPackage.DoctorId) + if err != nil || userDoctor == nil { + return false, errors.New("修改失败") + } + + if userDoctor.IdcardStatus != 1 { + return false, errors.New("该医生未进行实名认证") + } + + if userDoctor.IdenAuthStatus != 1 { + return false, errors.New("该医生未进行身份认证") + } + + if userDoctor.IsBindBank != 1 { + return false, errors.New("该医生未绑定结算银行卡") + } + + // 开启 + if req.IsEnable == 1 { + // 获取医生多点执业状态 + userDoctorService := UserDoctorService{} + + multiPointStatus, _ := userDoctorService.GetDoctorMultiPointEnable(userDoctor.DoctorId) + if multiPointStatus == 0 { + return false, errors.New("该医生未开启多点执业") + } + + // 获取专家图文问诊价格 + maps := make(map[string]interface{}) + maps["doctor_id"] = userDoctor.DoctorId + maps["inquiry_type"] = 1 + maps["inquiry_mode"] = 1 + + doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} + _, err := doctorInquiryConfigDao.GetDoctorInquiryConfig(maps) + if err != nil && req.IsEnable == 1 { + return false, errors.New("本服务需设置图文问诊的价格,才可开启") + } + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + doctorConfigHealthPackageData := make(map[string]interface{}) + + // 将 id 转换为 int64 类型 + packageId, err := strconv.ParseInt(req.PackageId, 10, 64) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + + if packageId != doctorConfigHealthPackage.PackageId { + doctorConfigHealthPackageData["package_id"] = packageId + } + + servicePrice, err := strconv.ParseFloat(req.ServicePrice, 64) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + + if servicePrice != doctorConfigHealthPackage.ServicePrice { + doctorConfigHealthPackageData["service_price"] = servicePrice + } + + if len(doctorConfigHealthPackageData) > 0 { + err := doctorConfigHealthPackageDao.EditDoctorConfigHealthPackageById(tx, healthPackageId, doctorConfigHealthPackageData) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + } + + // 处理问诊配置 + // 获取医生问诊配置 + doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} + maps := make(map[string]interface{}) + maps["doctor_id"] = doctorConfigHealthPackage.DoctorId + maps["inquiry_type"] = 1 + maps["inquiry_mode"] = 8 + doctorInquiryConfig, _ := doctorInquiryConfigDao.GetDoctorInquiryConfig(maps) + if doctorInquiryConfig == nil { + // 新增医生问诊配置 + doctorInquiryConfig = &model.DoctorInquiryConfig{ + DoctorId: doctorConfigHealthPackage.DoctorId, + InquiryType: 1, + InquiryMode: 8, + IsEnable: req.IsEnable, + LastEnableMethod: 2, + WorkNumDay: 0, + InquiryPrice: nil, + } + + doctorInquiryConfig, err = doctorInquiryConfigDao.AddDoctorInquiryConfig(tx, doctorInquiryConfig) + if err != nil || doctorInquiryConfig == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + } else { + // 修改医生问诊配置 + doctorInquiryConfigData := make(map[string]interface{}) + if req.IsEnable != doctorInquiryConfig.IsEnable { + doctorInquiryConfigData["is_enable"] = req.IsEnable + if req.IsEnable == 1 { + doctorInquiryConfigData["last_enable_method"] = 2 + } + } + + if len(doctorInquiryConfigData) > 0 { + err = doctorInquiryConfigDao.EditDoctorInquiryConfigById(tx, doctorInquiryConfig.InquiryConfigId, doctorInquiryConfigData) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + } + } + + tx.Commit() + return true, nil +} + +// AddDoctorHealth 新增医生健康包配置 +func (r *DoctorConfigHealthPackageService) AddDoctorHealth(req requests.AddDoctorHealth) (bool, error) { + // 将 id 转换为 int64 类型 + packageId, err := strconv.ParseInt(req.PackageId, 10, 64) + if err != nil { + return false, errors.New("修改失败") + } + + doctorId, err := strconv.ParseInt(req.DoctorId, 10, 64) + if err != nil { + return false, errors.New("修改失败") + } + + // 获取医生数据 + userDoctorDao := dao.UserDoctorDao{} + userDoctor, err := userDoctorDao.GetUserDoctorById(doctorId) + if err != nil || userDoctor == nil { + return false, errors.New("医生错误") + } + + if userDoctor.IdcardStatus != 1 { + return false, errors.New("该医生未进行实名认证") + } + + if userDoctor.IdenAuthStatus != 1 { + return false, errors.New("该医生未进行身份认证") + } + + if userDoctor.IsBindBank != 1 { + return false, errors.New("该医生未绑定结算银行卡") + } + + doctorConfigHealthPackageDao := dao.DoctorConfigHealthPackageDao{} + + maps := make(map[string]interface{}) + maps["doctor_id"] = doctorId + doctorConfigHealthPackage, err := doctorConfigHealthPackageDao.GetDoctorConfigHealthPackage(maps) + if doctorConfigHealthPackage != nil { + return false, errors.New("该医生存在健康包配置,请勿重复添加") + } + + // 获取健康包配置 + healthPackageDao := dao.HealthPackageDao{} + healthPackage, err := healthPackageDao.GetHealthPackagePreloadById(packageId) + if err != nil { + return false, errors.New("健康包错误") + } + + // 获取专家图文问诊价格 + maps = make(map[string]interface{}) + maps["doctor_id"] = req.DoctorId + maps["inquiry_type"] = 1 + maps["inquiry_mode"] = 1 + + doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} + doctorInquiryConfig, err := doctorInquiryConfigDao.GetDoctorInquiryConfig(maps) + if err != nil && req.IsEnable == 1 { + return false, errors.New("本服务需设置图文问诊的价格,才可开启") + } + + // 获取医生多点执业状态 + userDoctorService := UserDoctorService{} + + multiPointStatus, _ := userDoctorService.GetDoctorMultiPointEnable(userDoctor.DoctorId) + if multiPointStatus == 0 { + return false, errors.New("该医生未开启多点执业") + } + + // 价格计算 + // 重新价格计算(专家图文问诊价格*费率+30盒35元的干爽颗粒) + serviceRate, err := strconv.ParseFloat(healthPackage.ServiceRate, 64) + if err != nil { + return false, errors.New("修改失败") + } + + inquiryPrice := *doctorInquiryConfig.InquiryPrice + servicePrice := inquiryPrice*serviceRate/100*6 + healthPackage.DiscountProductTotalAmount + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 创建医生健康包 + doctorConfigHealthPackage = &model.DoctorConfigHealthPackage{ + DoctorId: doctorId, + PackageId: packageId, + ServicePrice: servicePrice, + } + + doctorConfigHealthPackage, err = doctorConfigHealthPackageDao.AddDoctorConfigHealthPackage(tx, doctorConfigHealthPackage) + if err != nil || doctorConfigHealthPackage == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + // 增加医生问诊配置 + if req.IsEnable == 1 { + doctorInquiryConfig = &model.DoctorInquiryConfig{ + DoctorId: doctorId, + InquiryType: 1, + InquiryMode: 8, + IsEnable: req.IsEnable, + LastEnableMethod: 2, + WorkNumDay: 0, + InquiryPrice: nil, + } + + doctorInquiryConfig, err = doctorInquiryConfigDao.AddDoctorInquiryConfig(tx, doctorInquiryConfig) + if err != nil || doctorInquiryConfig == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + } + + tx.Commit() + return true, nil +} diff --git a/api/service/export.go b/api/service/export.go index 101992a..86e075d 100644 --- a/api/service/export.go +++ b/api/service/export.go @@ -282,6 +282,34 @@ type OrderProductData struct { CreatedAt time.Time // 创建时间 } +// OrderServicePackageDto 订单-服务包 +type OrderServicePackageDto struct { + OrderServiceNo string // 系统订单编号 + DoctorName string // 医生姓名 + PatientName string // 患者姓名-就诊人 + PatientSex string // 患者性别-就诊人(0:未知 1:男 2:女) + PatientAge int // 患者年龄-就诊人 + PatientMobile string // 患者电话 + EscrowTradeNo string // 第三方支付流水号 + OrderServiceType string // 服务包类型(1:健康包 2:随访包) + OrderServiceStatus string // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + PayChannel string // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) + PayStatus string // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + CancelReason string // 取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时) + AmountTotal float64 // 订单金额 + PaymentAmountTotal float64 // 实际付款金额 + PayTime time.Time // 支付时间 + StartTime time.Time // 开始服务时间 + FinishTime time.Time // 结束服务时间 + RefundStatus string // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款) + CancelTime time.Time // 订单取消时间 + CancelRemarks string // 取消订单备注 + AddFinishStatus string // 添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败) + AddFinishTime time.Time // 添加完成订单延迟队列时间 + AddFinishFailReason string // 添加完成订单延迟队列失败原因 + CreatedAt time.Time // 创建时间 +} + // OrderPrescriptionData 处方 type OrderPrescriptionData struct { DoctorName string // 医生姓名 @@ -308,6 +336,31 @@ type OrderPrescriptionData struct { CreatedAt time.Time // 创建时间 } +// ProductData 系统商品 +type ProductData struct { + ProductName string // 商品名称 + CommonName string // 商品通用名 + Stock string // 库存 + ProductStatus string // 商品状态(1:正常 2:下架) + IsDelete string // 是否删除(0:否 1:是) + PrescriptionNum string // 处方可开具的数量 + ProductPrice float64 // 商品价格 + MnemonicCode string // 商品助记码(首字母简拼) + ProductType string // 药品类型(0:未知 1:中成药 2:西药) + ProductPlatformCode string // 处方平台商品编码 + ProductPharmacyCode string // 第三方药店商品编码 + ProductSpec string // 商品规格 + LicenseNumber string // 批准文号 + Manufacturer string // 生产厂家 + SingleUnit string // 单次剂量(例:1次1包) + SingleUse string // 单次用法(例:口服) + PackagingUnit string // 基本包装单位(例:盒/瓶) + FrequencyUse string // 使用频率(例:1天3次) + AvailableDays float64 // 可用天数(3) + ProductRemarks string // 商品备注 + CreatedAt time.Time // 创建时间 +} + // DoctorWithdrawal 提现记录 func (r *ExportService) DoctorWithdrawal(doctorWithdrawals []*model.DoctorWithdrawal) (string, error) { header := []utils.HeaderCellData{ @@ -1356,7 +1409,7 @@ func (r *ExportService) OrderInquiry(d []*model.OrderInquiry) (string, error) { for _, v := range d { data := OrderInquiryForAccount{ InquiryNo: v.InquiryNo, - DoctorName: v.PatientName, + DoctorName: "", PatientName: v.PatientName, PatientAge: fmt.Sprintf("%d", v.PatientAge), EscrowTradeNo: v.EscrowTradeNo, @@ -1616,6 +1669,121 @@ func (r *ExportService) OrderProduct(d []*model.OrderProduct) (string, error) { return ossPath, nil } +// OrderServicePackage 服务包订单 +func (r *ExportService) OrderServicePackage(d []*model.OrderServicePackage) (string, error) { + header := []utils.HeaderCellData{ + {Value: "系统订单编号", CellType: "string", NumberFmt: "", ColWidth: 25}, + {Value: "医生姓名", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "患者姓名-就诊人", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "患者性别-就诊人", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "患者年龄-就诊人", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "患者电话", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "第三方支付流水号", CellType: "string", NumberFmt: "", ColWidth: 35}, + {Value: "服务包类型", CellType: "string", NumberFmt: "", ColWidth: 25}, + {Value: "订单状态", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "支付渠道", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "支付状态", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "订单取消原因", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "订单金额", CellType: "float64", NumberFmt: "0.0000", ColWidth: 18}, + {Value: "实际付款金额", CellType: "float64", NumberFmt: "0.0000", ColWidth: 18}, + {Value: "支付时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + {Value: "开始服务时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + {Value: "结束服务时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + {Value: "退款状态", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "订单取消时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + {Value: "订单取消备注", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "添加完成订单延迟队列状态", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "添加完成订单延迟队列时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + {Value: "添加完成订单延迟队列失败原因", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "创建时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + } + + var dataSlice []interface{} + for _, v := range d { + data := OrderServicePackageDto{ + OrderServiceNo: v.OrderServiceNo, + PatientName: v.PatientName, + PatientSex: utils.SexToString(v.PatientSex), + PatientAge: v.PatientAge, + EscrowTradeNo: v.EscrowTradeNo, + OrderServiceType: utils.OrderServiceTypeToString(v.OrderServiceType), + OrderServiceStatus: utils.OrderServiceStatusToString(v.OrderServiceStatus), + PayChannel: utils.PayChannelToString(v.PayChannel), + PayStatus: utils.PayStatusToString(v.PayStatus), + CancelReason: utils.OrderServicePackageCancelReasonToString(v.CancelReason), + AmountTotal: v.AmountTotal, + PaymentAmountTotal: v.AmountTotal, + RefundStatus: utils.RefundStatusToString(v.RefundStatus), + CancelRemarks: v.CancelRemarks, + AddFinishStatus: utils.AddFinishStatusToString(v.AddFinishStatus), + AddFinishFailReason: v.AddFinishFailReason, + } + + if v.UserDoctor != nil { + // 医生姓名 + data.DoctorName = v.UserDoctor.UserName + } + + if v.UserPatient != nil { + if v.UserPatient.User != nil { + data.PatientMobile = v.UserPatient.User.Mobile + } + } + + if v.PayTime != (model.LocalTime{}) { + t := time.Time(v.PayTime) + data.PayTime = t + } + + if v.StartTime != (model.LocalTime{}) { + t := time.Time(v.StartTime) + data.StartTime = t + } + + if v.FinishTime != (model.LocalTime{}) { + t := time.Time(v.FinishTime) + data.FinishTime = t + } + + if v.CancelTime != (model.LocalTime{}) { + t := time.Time(v.CancelTime) + data.CancelTime = t + } + + if v.AddFinishTime != (model.LocalTime{}) { + t := time.Time(v.AddFinishTime) + data.AddFinishTime = t + } + + if v.CreatedAt != (model.LocalTime{}) { + t := time.Time(v.CreatedAt) + data.CreatedAt = t + } + + dataSlice = append(dataSlice, data) + } + + file, err := utils.Export(header, dataSlice) + if err != nil { + return "", err + } + + // 设置文件名字 + now := time.Now() + dateTimeString := now.Format("20060102150405") // 当前时间字符串 + rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数 + ossPath := "admin/export/服务包订单" + dateTimeString + fmt.Sprintf("%d", rand.Intn(9000)+1000) + ".xlsx" + + // 上传oss + _, err = aliyun.PutObjectByte(ossPath, file.Bytes()) + if err != nil { + return "", err + } + + ossPath = utils.AddOssDomain("/" + ossPath) + return ossPath, nil +} + // OrderPrescription 处方 func (r *ExportService) OrderPrescription(d []*model.OrderPrescription) (string, error) { header := []utils.HeaderCellData{ @@ -1748,3 +1916,87 @@ func (r *ExportService) OrderPrescription(d []*model.OrderPrescription) (string, ossPath = utils.AddOssDomain("/" + ossPath) return ossPath, nil } + +// Product 系统药品 +func (r *ExportService) Product(d []*model.Product) (string, error) { + header := []utils.HeaderCellData{ + {Value: "商品名称", CellType: "string", NumberFmt: "", ColWidth: 40}, + {Value: "商品通用名", CellType: "string", NumberFmt: "", ColWidth: 40}, + {Value: "库存", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "商品状态", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "是否删除", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "处方可开具的数量", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "商品价格", CellType: "float64", NumberFmt: "0.0000", ColWidth: 18}, + {Value: "商品助记码(首字母简拼)", CellType: "string", NumberFmt: "", ColWidth: 30}, + {Value: "药品类型", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "处方平台商品编码", CellType: "string", NumberFmt: "", ColWidth: 30}, + {Value: "第三方药店商品编码", CellType: "string", NumberFmt: "", ColWidth: 30}, + {Value: "商品规格", CellType: "string", NumberFmt: "", ColWidth: 30}, + {Value: "批准文号", CellType: "string", NumberFmt: "", ColWidth: 30}, + {Value: "生产厂家", CellType: "string", NumberFmt: "", ColWidth: 40}, + {Value: "单次剂量(例:1次1包)", CellType: "string", NumberFmt: "", ColWidth: 30}, + {Value: "单次用法(例:口服)", CellType: "string", NumberFmt: "", ColWidth: 30}, + {Value: "基本包装单位(例:盒/瓶)", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "使用频率(例:1天3次)", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "可用天数(3)", CellType: "float64", NumberFmt: "0.0000", ColWidth: 18}, + {Value: "商品备注", CellType: "string", NumberFmt: "", ColWidth: 40}, + {Value: "创建时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + } + + var dataSlice []interface{} + for _, v := range d { + data := ProductData{ + ProductName: v.ProductName, + CommonName: v.CommonName, + Stock: "0", + ProductStatus: utils.IsProductStatusToString(v.ProductStatus), + IsDelete: utils.IsIsDeleteToString(v.IsDelete), + PrescriptionNum: fmt.Sprintf("%d", v.PrescriptionNum), + ProductPrice: v.ProductPrice, + MnemonicCode: v.MnemonicCode, + ProductType: utils.IsProductTypeToString(v.ProductType), + ProductPlatformCode: v.ProductPlatformCode, + ProductPharmacyCode: v.ProductPharmacyCode, + ProductSpec: v.ProductSpec, + LicenseNumber: v.LicenseNumber, + Manufacturer: v.Manufacturer, + SingleUnit: v.SingleUnit, + SingleUse: v.SingleUse, + PackagingUnit: v.PackagingUnit, + FrequencyUse: v.FrequencyUse, + AvailableDays: v.AvailableDays, + ProductRemarks: v.ProductRemarks, + } + + if v.ProductPlatformAmount != nil { + data.Stock = strconv.Itoa(int(v.ProductPlatformAmount.Stock)) + } + + if v.CreatedAt != (model.LocalTime{}) { + t := time.Time(v.CreatedAt) + data.CreatedAt = t + } + + dataSlice = append(dataSlice, data) + } + + file, err := utils.Export(header, dataSlice) + if err != nil { + return "", err + } + + // 设置文件名字 + now := time.Now() + dateTimeString := now.Format("20060102150405") // 当前时间字符串 + rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数 + ossPath := "admin/export/系统药品" + dateTimeString + fmt.Sprintf("%d", rand.Intn(9000)+1000) + ".xlsx" + + // 上传oss + _, err = aliyun.PutObjectByte(ossPath, file.Bytes()) + if err != nil { + return "", err + } + + ossPath = utils.AddOssDomain("/" + ossPath) + return ossPath, nil +} diff --git a/api/service/hospital.go b/api/service/hospital.go new file mode 100644 index 0000000..b579410 --- /dev/null +++ b/api/service/hospital.go @@ -0,0 +1,233 @@ +package service + +import ( + "errors" + "fmt" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" +) + +type HospitalService struct { +} + +// AddHospital 新增医院 +func (r *HospitalService) AddHospital(req requests.AddHospital) (bool, error) { + hospitalDao := dao.HospitalDao{} + + // 检测医院是否重复 + maps := make(map[string]interface{}) + maps["hospital_name"] = req.HospitalName + maps["province_id"] = req.ProvinceId + maps["city_id"] = req.CityId + hospitals, err := hospitalDao.GetHospitalList(maps) + if err != nil { + return false, errors.New("医院重复添加") + } + + if len(hospitals) != 0 { + return false, errors.New("医院重复添加") + } + + var province string + var city string + var county string + + areaDao := dao.AreaDao{} + if req.ProvinceId != 0 { + area, err := areaDao.GetAreaById(req.ProvinceId) + if err != nil || area == nil { + return false, errors.New("省份数据错误") + } + province = area.AreaName + } + + if req.CityId != 0 { + area, err := areaDao.GetAreaById(req.CityId) + if err != nil || area == nil { + return false, errors.New("城市数据错误") + } + city = area.AreaName + } + + if req.CountyId != 0 { + area, err := areaDao.GetAreaById(req.CountyId) + if err != nil || area == nil { + return false, errors.New("城市数据错误") + } + county = area.AreaName + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 新增商品表 + hospital := &model.Hospital{ + HospitalName: req.HospitalName, + HospitalStatus: *req.HospitalStatus, + HospitalLevelName: req.HospitalLevelName, + PostCode: req.PostCode, + TelePhone: req.TelePhone, + ProvinceId: req.ProvinceId, + Province: province, + CityId: req.CityId, + City: city, + CountyId: req.CountyId, + County: county, + Address: req.Address, + Lat: req.Lat, + Lng: req.Lng, + Desc: req.Desc, + } + + hospital, err = hospitalDao.AddHospital(tx, hospital) + if err != nil || hospital == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + tx.Commit() + return true, nil +} + +// PutHospital 修改医院 +func (r *HospitalService) PutHospital(hospitalId int64, req requests.PutHospital) (bool, error) { + hospitalDao := dao.HospitalDao{} + area, err := hospitalDao.GetHospitalById(hospitalId) + if err != nil || area == nil { + return false, errors.New("省份数据错误") + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + fmt.Println(r) + } + }() + + hospitalData := make(map[string]interface{}) + + if req.HospitalName != area.HospitalName { + hospitalData["hospital_name"] = req.HospitalName + } + + if *req.HospitalStatus != area.HospitalStatus { + hospitalData["hospital_status"] = req.HospitalStatus + } + + if req.HospitalLevelName != area.HospitalLevelName { + hospitalData["hospital_level_name"] = req.HospitalLevelName + } + + if req.PostCode != "" { + if req.PostCode != area.PostCode { + hospitalData["post_code"] = req.PostCode + } + } + + if req.TelePhone != "" { + if req.TelePhone != area.TelePhone { + hospitalData["tele_phone"] = req.TelePhone + } + } + + if req.ProvinceId != 0 { + if req.ProvinceId != area.ProvinceId { + areaDao := dao.AreaDao{} + area, err := areaDao.GetAreaById(req.ProvinceId) + if err != nil || area == nil { + return false, errors.New("省份数据错误") + } + + hospitalData["province_id"] = req.ProvinceId + hospitalData["province"] = area.AreaName + + } + } + + if req.CityId != 0 { + if req.CityId != area.CityId { + areaDao := dao.AreaDao{} + area, err := areaDao.GetAreaById(req.CityId) + if err != nil || area == nil { + return false, errors.New("省份数据错误") + } + + hospitalData["city_id"] = req.CityId + hospitalData["city"] = area.AreaName + + } + } + + if req.CountyId != 0 { + if req.CountyId != area.CountyId { + areaDao := dao.AreaDao{} + area, err := areaDao.GetAreaById(req.CountyId) + if err != nil || area == nil { + return false, errors.New("省份数据错误") + } + + hospitalData["county_id"] = req.CountyId + hospitalData["county"] = area.AreaName + + } + } + + if req.Address != "" { + if req.Address != area.Address { + hospitalData["address"] = req.Address + } + } + + if req.Lat != "" { + if req.Lat != area.Lat { + hospitalData["lat"] = req.Lat + } + } + + if req.Lng != "" { + if req.Lng != area.Lng { + hospitalData["lng"] = req.Lng + } + } + + if req.Desc != "" { + if req.Desc != area.Desc { + hospitalData["desc"] = req.Desc + } + } + + if len(hospitalData) > 0 { + err = hospitalDao.EditHospitalById(tx, hospitalId, hospitalData) + if err != nil || area == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + } + + tx.Commit() + return true, nil +} + +// GetHospital 系统优惠卷详情 +func (r *HospitalService) GetHospital(hospitalId int64) (g *dto.HospitalDto, err error) { + hospitalDao := dao.HospitalDao{} + hospital, err := hospitalDao.GetHospitalById(hospitalId) + if err != nil || hospital == nil { + return nil, errors.New(err.Error()) + } + + // 处理返回值 + g = dto.GetHospitalDto(hospital) + + return g, nil +} diff --git a/api/service/messagePush.go b/api/service/messagePush.go new file mode 100644 index 0000000..3d5b6f0 --- /dev/null +++ b/api/service/messagePush.go @@ -0,0 +1,36 @@ +package service + +import ( + "errors" + "fmt" + "hospital-admin-api/extend/rabbitMq" +) + +// PatientDistributeCoupon 患者-优惠劵发放-站内 +func PatientDistributeCoupon(couponName string, userId int64) (bool, error) { + // 建立队列连接 + rabbitMQ, err := rabbitMq.NewRabbitMQClient() + if err != nil { + return false, errors.New("内部错误") + } + + defer rabbitMQ.Close() + + data := make(map[string]interface{}) + data["user_id"] = fmt.Sprintf("%d", userId) + data["notice_type"] = 3 + data["notice_system_type"] = 2 + data["from_name"] = "肝胆小秘书" + data["notice_brief_title"] = "有新的优惠券已下发至您的账户,点击查看详情。" + data["notice_title"] = fmt.Sprintf("【%s】已到账", couponName) + data["notice_content"] = "有新的优惠劵已下发至您的账户中,点击查看详情!" + data["link_type"] = 7 + + err = rabbitMQ.Publish("send.station.message.queue", "amqp.direct", "SendStationMessage", data) + if err != nil { + return false, err + } + + return true, nil + +} diff --git a/api/service/order.go b/api/service/order.go index 358be81..5b5a346 100644 --- a/api/service/order.go +++ b/api/service/order.go @@ -3,8 +3,10 @@ package service import ( "errors" "fmt" + "gorm.io/gorm" "hospital-admin-api/api/dao" "hospital-admin-api/api/model" + "hospital-admin-api/extend/aliyun" "hospital-admin-api/extend/prescription" "hospital-admin-api/global" "hospital-admin-api/utils" @@ -310,3 +312,145 @@ func (r *OrderService) ReportPreProduct(orderProductId, adminUserId int64) (bool return true, nil } + +// 发起订单退款-未完成 +func (r *OrderService) orderRefund(orderNo string, refundReason string) (bool, error) { + orderDao := dao.OrderDao{} + + // 获取订单数据 + maps := make(map[string]interface{}) + maps["order_no"] = orderNo + order, err := orderDao.GetOrder(maps) + if err != nil || order == nil { + return false, errors.New("订单数据错误") + } + + // 检测订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + if order.RefundStatus == 2 { + return false, errors.New("订单退款中") + } + + if order.RefundStatus == 3 { + return false, errors.New("订单已退款成功") + } + + if order.RefundStatus == 5 { + return false, errors.New("订单已退款关闭") + } + + // 检测支付状态 (1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + if order.PayStatus != 2 { + return false, errors.New("订单支付状态错误") + } + + return false, nil +} + +// PdfToImg 处理pdf转图片 +func (r *OrderService) PdfToImg() (bool, error) { + //orderPrescription := dao.OrderPrescriptionDao{} + orderPrescriptionFileDao := dao.OrderPrescriptionFileDao{} + + // 获取订单数据 + maps := make(map[string]interface{}) + orderPrescriptionFiles, err := orderPrescriptionFileDao.GetOrderPrescriptionFileList(maps) + if err != nil { + return false, errors.New("订单数据错误") + } + + for _, orderPrescriptionFile := range orderPrescriptionFiles { + if orderPrescriptionFile.PrescriptionPdfOssPath == "" { + continue + } + + if orderPrescriptionFile.IsConvertedPdf != 1 { + continue + } + + OrderPrescriptionId := fmt.Sprintf("%d", orderPrescriptionFile.OrderPrescriptionId) + + PrescriptionImgOssPath := strings.TrimLeft(orderPrescriptionFile.PrescriptionImgOssPath, "/") + + // 下载处方pdf到本地 + local, err := aliyun.GetObjectToLocal(PrescriptionImgOssPath, + "/Users/wucongxing/Desktop/work/go/hospital-admin-api/data/bak/"+OrderPrescriptionId+".jpg") + if err != nil || !local { + return false, err + } + + //pdfPath := "/Users/wucongxing/Desktop/work/go/hospital-admin-api/data/" + OrderPrescriptionId + ".pdf" + //outputDir := "/Users/wucongxing/Desktop/work/go/hospital-admin-api/data/img" + // + //if err := utils.ConvertPDFToImages(pdfPath, outputDir, OrderPrescriptionId+".jpg"); err != nil { + // return false, err + //} + // + //// 修改为已转换 + //// 开始事务 + //tx := global.Db.Begin() + //defer func() { + // if r := recover(); r != nil { + // tx.Rollback() + // } + //}() + // + //data := make(map[string]interface{}) + //data["is_converted_pdf"] = 1 + //err = orderPrescriptionFileDao.EditOrderPrescriptionFileById(tx, orderPrescriptionFile.PrescriptionFileId, data) + //if err != nil { + // tx.Rollback() + // return false, err + //} + // + //tx.Commit() + } + + return true, nil +} + +// ReturnOrderCoupon 退还用户优惠卷 +func (r *OrderService) ReturnOrderCoupon(orderId int64, tx *gorm.DB) (bool, error) { + orderCouponDao := dao.OrderCouponDao{} + userCouponDao := dao.UserCouponDao{} + + // 获取该订单全部优惠卷数据 + maps := make(map[string]interface{}) + maps["order_id"] = orderId + orderCoupons, err := orderCouponDao.GetOrderCouponList(maps) + if err != nil { + return false, err + } + + // 无优惠卷数据 + if len(orderCoupons) == 0 { + return true, nil + } + + for _, coupon := range orderCoupons { + // 获取用户优惠卷数据 + userCoupon, err := userCouponDao.GetUserCouponById(coupon.UserCouponId) + if err != nil || userCoupon == nil { + // 无该优惠卷数据,无需处理 + continue + } + + // 恢复优惠卷 + userCouponData := make(map[string]interface{}) + + // 检测优惠卷过期时间。判断是否需要退还 + if userCoupon.ValidEndTime.Before(time.Now()) { + userCouponData["user_coupon_status"] = 3 + } else { + userCouponData["user_coupon_status"] = 0 + userCouponData["coupon_use_date"] = nil + } + + err = userCouponDao.EditUserCouponById(tx, userCoupon.UserCouponId, userCouponData) + if err != nil { + // 恢复优惠卷失败 + return false, errors.New("恢复优惠卷失败") + } + } + + return true, nil +} diff --git a/api/service/orderProduct.go b/api/service/orderProduct.go index bc4c160..278318d 100644 --- a/api/service/orderProduct.go +++ b/api/service/orderProduct.go @@ -58,6 +58,10 @@ func (r *OrderProductService) GetOrderProduct(orderProductId int64) (g *dto.Orde return nil, errors.New(err.Error()) } + // 获取药品订单优惠卷 + orderProductCouponDao := dao.OrderProductCouponDao{} + orderProductCoupon, err := orderProductCouponDao.GetOrderProductCouponByOrderProductId(orderProduct.OrderProductId) + // 处理返回值 g = dto.GetOrderProductDto(orderProduct) @@ -79,6 +83,12 @@ func (r *OrderProductService) GetOrderProduct(orderProductId int64) (g *dto.Orde // 加载退款数据 g.LoadOrderProductRefund(orderProductRefund) + // 加载药品订单优惠卷数据 + g.LoadOrderProductCoupon(orderProductCoupon) + + // 计算优惠金额 + g.DiscountAmount = orderProduct.AmountTotal + orderProduct.LogisticsFee - orderProduct.CouponAmountTotal - orderProduct.PaymentAmountTotal + return g, nil } @@ -154,68 +164,92 @@ func (r *OrderProductService) CancelOrderProduct(req requests.CancelOrderProduct var successTime time.Time var refundId string - // // 通知处方平台订单取消 - // _, err = prescription.NoticePreOrderCancel(orderProduct.OrderProductNo) - // if err != nil { - // tx.Rollback() - // return false, err - // } + if orderProduct.PaymentAmountTotal > 0 { + // 微信退款 + refundRequest := weChat.RefundRequest{ + TransactionId: orderProduct.EscrowTradeNo, + OutTradeNo: orderProduct.OrderProductNo, + OutRefundNo: refundNo, + Reason: "客服取消", + RefundAmount: int64(orderProduct.PaymentAmountTotal * 100), + PaymentAmountTotal: int64(orderProduct.PaymentAmountTotal * 100), + NotifyUrl: config.C.Wechat.RefundNotifyDomain + config.C.Wechat.PatientProductRefundNotifyUrl, + } - // 微信退款 - refundRequest := weChat.RefundRequest{ - TransactionId: orderProduct.EscrowTradeNo, - OutTradeNo: orderProduct.OrderProductNo, - OutRefundNo: refundNo, - Reason: "客服取消", - RefundAmount: int64(orderProduct.PaymentAmountTotal * 100), - PaymentAmountTotal: int64(orderProduct.PaymentAmountTotal * 100), - NotifyUrl: config.C.Wechat.RefundNotifyDomain + config.C.Wechat.PatientProductRefundNotifyUrl, + refund, err := refundRequest.Refund(2) + if err != nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + if refund.Status == nil { + tx.Rollback() + return false, errors.New("退款状态错误") + } + + if *refund.Status == "SUCCESS" { + // 退款成功 + refundStatus = 3 + + if refund.SuccessTime != nil { + successTime = *refund.SuccessTime + } + } else if *refund.Status == "CLOSED" { + // 退款关闭 + refundStatus = 5 + + } else if *refund.Status == "PROCESSING" { + // 退款处理中 + refundStatus = 2 + + } else if *refund.Status == "ABNORMAL" { + // 退款异常 + tx.Rollback() + return false, errors.New("退款状态错误") + } else { + tx.Rollback() + return false, errors.New("退款状态错误") + } + + if refund.RefundId == nil { + tx.Rollback() + return false, errors.New("缺少退款订单编号") + } + + // 退款编号 + refundId = *refund.RefundId + } else { + // 支付金额为0,模拟退款 + refundId = "模拟退款:" + strconv.FormatInt(global.Snowflake.Generate().Int64(), 10) + refundStatus = 3 + successTime = time.Now() + + // 模拟退款时手动退还优惠卷 + if orderProduct.CouponAmountTotal > 0 { + orderService := OrderService{} + res, err := orderService.ReturnOrderCoupon(orderProduct.OrderId, tx) + if err != nil || !res { + // 退还优惠卷失败 + tx.Rollback() + return false, err + } + } } - refund, err := refundRequest.Refund(2) + // 修改订单为取消 + orderData := make(map[string]interface{}) + orderData["cancel_status"] = 1 + orderData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05") + orderData["cancel_remarks"] = req.CancelRemarks + + orderDao := dao.OrderDao{} + err = orderDao.EditOrderById(tx, orderProduct.OrderId, orderData) if err != nil { tx.Rollback() - return false, errors.New(err.Error()) + return false, errors.New("取消订单失败") } - if refund.Status == nil { - tx.Rollback() - return false, errors.New("退款状态错误") - } - - if *refund.Status == "SUCCESS" { - // 退款成功 - refundStatus = 3 - - if refund.SuccessTime != nil { - successTime = *refund.SuccessTime - } - } else if *refund.Status == "CLOSED" { - // 退款关闭 - refundStatus = 5 - - } else if *refund.Status == "PROCESSING" { - // 退款处理中 - refundStatus = 2 - - } else if *refund.Status == "ABNORMAL" { - // 退款异常 - tx.Rollback() - return false, errors.New("退款状态错误") - } else { - tx.Rollback() - return false, errors.New("退款状态错误") - } - - if refund.RefundId == nil { - tx.Rollback() - return false, errors.New("缺少退款订单编号") - } - - // 退款编号 - refundId = *refund.RefundId - - // 修改问诊订单退款状态 + // 修改订单退款状态 orderProductData["refund_status"] = refundStatus orderProductData["order_product_status"] = 5 // 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) orderProductData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05") // 订单取消时间 @@ -228,6 +262,29 @@ func (r *OrderProductService) CancelOrderProduct(req requests.CancelOrderProduct return false, errors.New("取消订单失败") } + // 新增退款表 + orderRefund := &model.OrderRefund{ + OrderId: orderProduct.OrderId, + PatientId: orderProduct.PatientId, + OrderNo: orderProduct.OrderProductNo, + RefundNo: refundNo, + RefundId: refundId, + RefundStatus: refundStatus, + RefundTotal: orderProduct.PaymentAmountTotal, + RefundReason: req.CancelRemarks, + } + + if refundStatus == 3 && !successTime.IsZero() { + orderRefund.SuccessTime = model.LocalTime(successTime) + } + + orderRefundDao := dao.OrderRefundDao{} + orderRefund, err = orderRefundDao.AddOrderRefund(tx, orderRefund) + if err != nil || orderRefund == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + // 新增退款表 orderProductRefund := &model.OrderProductRefund{ PatientId: orderProduct.PatientId, @@ -238,7 +295,10 @@ func (r *OrderProductService) CancelOrderProduct(req requests.CancelOrderProduct ProductRefundStatus: refundStatus, RefundTotal: orderProduct.PaymentAmountTotal, RefundReason: req.CancelRemarks, - SuccessTime: model.LocalTime(successTime), + } + + if refundStatus == 3 && !successTime.IsZero() { + orderProductRefund.SuccessTime = model.LocalTime(successTime) } orderProductRefundDao := dao.OrderProductRefundDao{} @@ -248,6 +308,40 @@ func (r *OrderProductService) CancelOrderProduct(req requests.CancelOrderProduct return false, errors.New(err.Error()) } + // 获取患者家庭成员进行中的服务包订单-健康包 + OrderServicePackageService := OrderServicePackageService{} + patientFamilyInProgressServicePackage, err := OrderServicePackageService.GetPatientFamilyInProgressServicePackage(orderProduct.UserPatient.UserId, orderProduct.FamilyId, orderProduct.DoctorId, 1) + if patientFamilyInProgressServicePackage != nil { + // 获取药品订单列表 + orderProductItemDao := dao.OrderProductItemDao{} + orderProductItems, err := orderProductItemDao.GetOrderProductItemByOrderProductId(orderProductId) + if err != nil || len(orderProductItems) <= 0 { + tx.Rollback() + return false, errors.New("订单数据错误") + } + + for _, item := range orderProductItems { + orderServicePackageProductDao := dao.OrderServicePackageProductDao{} + + // 回退服务包已使用药品数量 + maps := make(map[string]interface{}) + maps["order_service_id"] = patientFamilyInProgressServicePackage.OrderServiceId + maps["order_product_id"] = item.OrderProductId + maps["product_item_id"] = item.ProductItemId + maps["product_id"] = item.ProductId + orderServicePackageProduct, err := orderServicePackageProductDao.GetOrderServicePackageProduct(maps) + if err == nil && orderServicePackageProduct != nil { + orderServicePackageProductData := make(map[string]interface{}) + orderServicePackageProductData["used_quantity"] = 0 + err := orderServicePackageProductDao.EditOrderServicePackageProductById(tx, orderServicePackageProduct.ServiceProductId, orderServicePackageProductData) + if err != nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + } + } + } + // 记录日志 orderOperationLog := &model.OrderOperationLog{ OrderId: orderProduct.OrderProductId, @@ -279,7 +373,7 @@ func (r *OrderProductService) GetOrderProductConsignee(orderProductId int64) (*d } // 处理返回值 - u := dto.GetOrderProductConsigneeDtoDto(orderProduct) + u := dto.GetOrderProductConsigneeDto(orderProduct) return u, nil } diff --git a/api/service/orderServicePackage.go b/api/service/orderServicePackage.go new file mode 100644 index 0000000..1ff10b1 --- /dev/null +++ b/api/service/orderServicePackage.go @@ -0,0 +1,642 @@ +package service + +import ( + "errors" + "fmt" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/dto" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/config" + "hospital-admin-api/extend/weChat" + "hospital-admin-api/global" + "math" + "strconv" + "time" +) + +type OrderServicePackageService struct { +} + +// GetOrderServicePackage 服务包订单详情 +func (r *OrderServicePackageService) GetOrderServicePackage(orderServiceId int64) (g *dto.OrderServicePackageDto, err error) { + // 获取订单数据 + orderServicePackageDao := dao.OrderServicePackageDao{} + orderServicePackage, err := orderServicePackageDao.GetOrderServicePackageById(orderServiceId) + if err != nil || orderServicePackage == nil { + return nil, errors.New(err.Error()) + } + + // 获取病例 + orderServicePackageCaseDao := dao.OrderServicePackageCaseDao{} + orderServicePackageCase, err := orderServicePackageCaseDao.GetOrderServicePackageCaseByOrderServicePackageId(orderServiceId) + if orderServicePackageCase == nil { + return nil, errors.New("数据错误,无问诊病例") + } + + // 获取退款数据 + orderServicePackageRefundDao := dao.OrderServicePackageRefundDao{} + orderServicePackageRefund, err := orderServicePackageRefundDao.GetOrderServicePackageRefundByOrderServicePackageId(orderServiceId) + + // 医生数据 + userDoctorService := UserDoctorService{} + userDoctor, err := userDoctorService.GetUserDoctorById(orderServicePackage.DoctorId) + if err != nil { + return nil, errors.New(err.Error()) + } + + // 处理返回值 + g = dto.GetOrderServicePackageDto(orderServicePackage) + + // 加载医生数据 + g.UserDoctor = userDoctor + + // 加载订单退款数据 + g.LoadOrderServicePackageRefund(orderServicePackageRefund) + + // 加载问诊病例 + g.LoadMaskOrderServicePackageCase(orderServicePackageCase) + + return g, nil +} + +// GetOrderServicePackageDetailInfo 获取服务包订单服务权益详情 +func (r *OrderServicePackageService) GetOrderServicePackageDetailInfo(orderServiceId int64) (g *dto.OrderServicePackageDetailInfoDto, err error) { + // 获取订单数据 + orderServicePackageDao := dao.OrderServicePackageDao{} + orderServicePackage, err := orderServicePackageDao.GetOrderServicePackageById(orderServiceId) + if err != nil || orderServicePackage == nil { + return nil, errors.New(err.Error()) + } + + // 获取关联问诊订单 + orderServicePackageInquiryDao := dao.OrderServicePackageInquiryDao{} + orderServicePackageInquiry, err := orderServicePackageInquiryDao.GetOrderServicePackageInquiryPreloadByOrderNo(orderServicePackage.OrderServiceNo) + + // 获取订单详情数据 + orderServicePackageDDao := dao.OrderServicePackageDetailDao{} + orderServicePackageDetail, err := orderServicePackageDDao.GetOrderServicePackageDetailByOrderServicePackageId(orderServiceId) + if err != nil || orderServicePackageDetail == nil { + return nil, errors.New(err.Error()) + } + + // 获取关联病例 + orderServicePackageCaseDao := dao.OrderServicePackageCaseDao{} + orderServicePackageCase, err := orderServicePackageCaseDao.GetOrderServicePackageCaseByOrderId(orderServicePackage.OrderId) + if err != nil || orderServicePackageDetail == nil { + return nil, errors.New(err.Error()) + } + + // 处理返回值 + g = dto.GetOrderServicePackageDetailInfoDto(orderServicePackage) + + // 加载关联问诊订单数据 + if len(orderServicePackageInquiry) > 0 { + g.LoadOrderServicePackageInquiry(orderServicePackageInquiry) + } + + // 加载服务包订单详情数据 + g.LoadOrderServicePackageDetail(orderServicePackageDetail) + + // 加载服务包订单关联病例数据 + g.LoadOrderServicePackageCase(orderServicePackageCase) + + if g.OrderServiceStatus == 3 || g.OrderServiceStatus == 4 || g.OrderServiceStatus == 5 { + if !g.StartTime.IsEmpty() { + // 获取服务包当前月时间区间 + CurrentMonthStartDate, CurrentMonthFinishDate, err := r.getOrderServicePackageCurrentMonthDate(g.StartTime) + g.CurrentMonthStartDate = CurrentMonthStartDate.Format("2006年01月02日 15时04分") + g.CurrentMonthFinishDate = CurrentMonthFinishDate.Format("2006年01月02日 15时04分") + + // 检测问诊是否服务包首次问诊 + isFirst, err := r.isFirstInquiryServicePackage(g.OrderServiceNo) + if isFirst { + g.MonthInquiryCount = 1 + } else { + // 获取服务包当月已问诊次数 + g.MonthInquiryCount, err = r.GetCurrentMonthInquiryCount(g.OrderServiceType, orderServicePackage.UserId, orderServicePackage.DoctorId, g.PayTime) + if err != nil { + return nil, err + } + } + + fmt.Println(g.MonthInquiryCount) + + // 获取服务包当月剩余问诊次数 + g.RemainingInquiryCount = r.GetRemainingInquiryCount(orderServicePackageDetail.MonthlyFrequency, g.MonthInquiryCount) + + fmt.Println(g.RemainingInquiryCount) + } + } + + // 健康包数据 + if orderServicePackage.OrderServiceType == 1 { + if g.OrderServiceStatus == 3 || g.OrderServiceStatus == 4 || g.OrderServiceStatus == 5 { + // 获取用户某一类型优惠卷 + userCouponDao := dao.UserCouponDao{} + userCoupon, _ := userCouponDao.GetUserAllObjectTypeCoupon(orderServicePackage.UserId, 7) + + // 加载优惠卷数据 + g.LoadUserCoupon(userCoupon) + + // 获取健康包药品订单数据-周期内所有药品订单 + orderServicePackageProductDao := dao.OrderServicePackageProductDao{} + orderServicePackageProduct, _ := orderServicePackageProductDao.GetOrderServicePackageProductPreloadByOrderServiceId( + orderServicePackage.OrderServiceId) + + // 加载关联药品订单数据 + g.LoadOrderServicePackageProduct(orderServicePackageProduct) + + // 获取服务包内所有药品 + healthPackageProductDao := dao.HealthPackageProductDao{} + healthPackageProducts, err := healthPackageProductDao.GetHealthPackageProductByPackageId(orderServicePackageDetail.PackageId) + if err != nil { + return nil, err + } + + for _, healthPackageProduct := range healthPackageProducts { + // 获取服务包内某一药品的剩余数量 + remainingQuantity, err := r.GetOrderServiceProductCanUseQuantity(orderServicePackage.OrderServiceId, healthPackageProduct.ProductId, healthPackageProduct.Quantity) + if err != nil { + return nil, err + } + + g.OrderServicePackageDetail.LoadRemainingQuantity(remainingQuantity) + } + } + } + + return g, nil +} + +// CancelOrderServicePackage 取消服务包订单 +func (r *OrderServicePackageService) CancelOrderServicePackage(req requests.CancelOrderServicePackage, orderServiceId, adminUserId int64) (bool, error) { + // 获取订单数据 + orderServicePackageDao := dao.OrderServicePackageDao{} + orderServicePackage, err := orderServicePackageDao.GetOrderServicePackagePreloadById(orderServiceId) + if err != nil || orderServicePackage == nil { + return false, errors.New("订单数据错误") + } + + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + if orderServicePackage.OrderServiceStatus == 5 { + return false, errors.New("订单已取消,无法再次取消") + } + + // 检测订单退款状态 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + if orderServicePackage.RefundStatus == 1 { + return false, errors.New("订单申请退款中,无法取消") + } + + if orderServicePackage.RefundStatus == 2 { + return false, errors.New("订单正在退款中,无法取消") + } + + if orderServicePackage.RefundStatus == 3 { + return false, errors.New("订单已退款成功,无法取消") + } + + if orderServicePackage.RefundStatus == 6 { + return false, errors.New("订单退款异常,请联系技术人员") + } + + // 检测支付状态 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + if orderServicePackage.PayStatus != 2 { + return false, errors.New("订单未支付,无需取消") + } + + // 检测退款金额 + if *req.RefundAmount > orderServicePackage.PaymentAmountTotal { + return false, errors.New("退款金额不可超过实付金额") + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 退款编号 + refundNo := strconv.FormatInt(global.Snowflake.Generate().Int64(), 10) + + // 退款状态转换 + var refundStatus int + var successTime time.Time + var refundId string + + // 发起退款 + if orderServicePackage.PaymentAmountTotal > 0 { + refundRequest := weChat.RefundRequest{ + TransactionId: orderServicePackage.EscrowTradeNo, + OutTradeNo: orderServicePackage.OrderServiceNo, + OutRefundNo: refundNo, + Reason: "客服取消", + RefundAmount: int64(*req.RefundAmount * 100), + PaymentAmountTotal: int64(orderServicePackage.PaymentAmountTotal * 100), + NotifyUrl: config.C.Wechat.RefundNotifyDomain + config.C.Wechat.PatientServiceRefundNotifyUrl, + } + + refund, err := refundRequest.Refund(4) + if err != nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + if refund.Status == nil { + tx.Rollback() + return false, errors.New("退款状态错误") + } + + if *refund.Status == "SUCCESS" { + // 退款成功 + refundStatus = 3 + + if refund.SuccessTime != nil { + successTime = *refund.SuccessTime + } + } else if *refund.Status == "CLOSED" { + // 退款关闭 + refundStatus = 5 + + } else if *refund.Status == "PROCESSING" { + // 退款处理中 + refundStatus = 2 + + } else if *refund.Status == "ABNORMAL" { + // 退款异常 + tx.Rollback() + return false, errors.New("退款状态错误") + } else { + tx.Rollback() + return false, errors.New("退款状态错误") + } + + if refund.RefundId == nil { + tx.Rollback() + return false, errors.New("缺少退款订单编号") + } + + // 退款编号 + refundId = *refund.RefundId + } else { + // 支付金额为0,模拟退款 + refundId = "模拟退款:" + strconv.FormatInt(global.Snowflake.Generate().Int64(), 10) + refundStatus = 3 + successTime = time.Now() + + // 模拟退款时手动退还优惠卷 + if orderServicePackage.CouponAmountTotal > 0 { + orderService := OrderService{} + res, err := orderService.ReturnOrderCoupon(orderServicePackage.OrderId, tx) + if err != nil || !res { + // 退还优惠卷失败 + tx.Rollback() + return false, err + } + } + } + + // 修改订单为取消 + orderData := make(map[string]interface{}) + orderData["cancel_status"] = 1 + orderData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05") + orderData["cancel_remarks"] = req.CancelRemarks + + orderDao := dao.OrderDao{} + err = orderDao.EditOrderById(tx, orderServicePackage.OrderId, orderData) + if err != nil { + tx.Rollback() + return false, errors.New("取消订单失败") + } + + // 修改服务包订单为取消 + orderServicePackageData := make(map[string]interface{}) + orderServicePackageData["order_service_status"] = 5 // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + orderServicePackageData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05") // 订单取消时间 + orderServicePackageData["cancel_reason"] = 4 // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + orderServicePackageData["cancel_remarks"] = req.CancelRemarks // 取消订单备注(自动添加) + err = orderServicePackageDao.EditOrderServicePackageById(tx, orderServicePackage.OrderId, orderServicePackageData) + if err != nil { + tx.Rollback() + return false, errors.New("取消订单失败") + } + + // 新增退款表 + orderRefund := &model.OrderRefund{ + OrderId: orderServicePackage.OrderId, + PatientId: orderServicePackage.PatientId, + OrderNo: orderServicePackage.OrderServiceNo, + RefundNo: refundNo, + RefundId: refundId, + RefundStatus: refundStatus, + RefundTotal: *req.RefundAmount, + RefundReason: req.CancelRemarks, + } + + if refundStatus == 3 && !successTime.IsZero() { + orderRefund.SuccessTime = model.LocalTime(successTime) + } + + orderRefundDao := dao.OrderRefundDao{} + orderRefund, err = orderRefundDao.AddOrderRefund(tx, orderRefund) + if err != nil || orderRefund == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + // 新增服务包退款表 + orderServicePackageRefund := &model.OrderServicePackageRefund{ + PatientId: orderServicePackage.PatientId, + OrderServiceId: orderServicePackage.OrderServiceId, + OrderServiceNo: orderServicePackage.OrderServiceNo, + ServiceRefundNo: refundNo, + RefundId: refundId, + RefundStatus: refundStatus, + RefundTotal: *req.RefundAmount, + RefundReason: req.CancelRemarks, + SuccessTime: model.LocalTime(successTime), + } + + if refundStatus == 3 && !successTime.IsZero() { + orderServicePackageRefund.SuccessTime = model.LocalTime(successTime) + } + + orderServicePackageRefundDao := dao.OrderServicePackageRefundDao{} + orderServicePackageRefund, err = orderServicePackageRefundDao.AddOrderServicePackageRefund(tx, orderServicePackageRefund) + if err != nil || orderServicePackageRefund == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + // 获取服务包关联问诊订单 + for _, inquiry := range orderServicePackage.OrderServicePackageInquiry { + // 获取订单数据 + orderInquiryDao := dao.OrderInquiryDao{} + orderInquiry, err := orderInquiryDao.GetOrderInquiryById(inquiry.OrderInquiryId) + if err != nil || orderInquiry == nil { + tx.Rollback() + return false, errors.New("取消订单失败") + } + + // 检测订单状态 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + if orderInquiry.InquiryStatus == 6 { + continue + } + + // 检测订单状态 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + if orderInquiry.InquiryStatus == 7 { + continue + } + + // 支付金额为0,模拟退款 + refundId = "模拟退款:" + strconv.FormatInt(global.Snowflake.Generate().Int64(), 10) + refundStatus = 3 + successTime = time.Now() + // 退款编号 + refundNo = strconv.FormatInt(global.Snowflake.Generate().Int64(), 10) + + // 修改订单为取消 + orderData := make(map[string]interface{}) + orderData["cancel_status"] = 1 + orderData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05") + orderData["cancel_remarks"] = req.CancelRemarks + + orderDao := dao.OrderDao{} + err = orderDao.EditOrderById(tx, orderInquiry.OrderId, orderData) + if err != nil { + tx.Rollback() + return false, errors.New("取消订单失败") + } + + // 修改问诊订单为取消 + orderInquiryData := make(map[string]interface{}) + orderInquiryData["inquiry_status"] = 7 // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + orderInquiryData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05") // 订单取消时间 + orderInquiryData["cancel_reason"] = 4 // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + orderInquiryData["cancel_remarks"] = req.CancelRemarks // 取消订单备注(自动添加) + err = orderInquiryDao.EditOrderInquiryById(tx, orderInquiry.OrderInquiryId, orderInquiryData) + if err != nil { + tx.Rollback() + return false, errors.New("取消订单失败") + } + + // 新增退款表 + orderRefund := &model.OrderRefund{ + OrderId: orderInquiry.OrderId, + PatientId: orderInquiry.PatientId, + OrderNo: orderInquiry.InquiryNo, + RefundNo: refundNo, + RefundId: refundId, + RefundStatus: refundStatus, + RefundTotal: orderInquiry.PaymentAmountTotal, + RefundReason: req.CancelRemarks, + } + + if refundStatus == 3 && !successTime.IsZero() { + orderRefund.SuccessTime = model.LocalTime(successTime) + } + + orderRefundDao := dao.OrderRefundDao{} + orderRefund, err = orderRefundDao.AddOrderRefund(tx, orderRefund) + if err != nil || orderRefund == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + // 新增问诊退款表 + orderInquiryRefund := &model.OrderInquiryRefund{ + PatientId: orderInquiry.PatientId, + OrderInquiryId: orderInquiry.OrderInquiryId, + InquiryNo: orderInquiry.InquiryNo, + InquiryRefundNo: refundNo, + RefundId: refundId, + InquiryRefundStatus: refundStatus, + RefundTotal: orderInquiry.PaymentAmountTotal, + RefundReason: req.CancelRemarks, + SuccessTime: model.LocalTime(successTime), + } + + if refundStatus == 3 && !successTime.IsZero() { + orderInquiryRefund.SuccessTime = model.LocalTime(successTime) + } + + orderInquiryRefundDao := dao.OrderInquiryRefundDao{} + orderInquiryRefund, err = orderInquiryRefundDao.AddOrderInquiryRefund(tx, orderInquiryRefund) + if err != nil || orderInquiryRefund == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + // 记录日志 + orderOperationLog := &model.OrderOperationLog{ + OrderId: orderInquiry.OrderId, + OrderNo: orderInquiry.InquiryNo, + OrderType: 1, + OperatorId: adminUserId, + OperationContent: "服务包关联取消订单", + } + + orderOperationLogDao := dao.OrderOperationLogDao{} + orderOperationLog, err = orderOperationLogDao.AddOrderOperationLog(tx, orderOperationLog) + if err != nil || orderOperationLog == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + } + + // 记录日志 + orderOperationLog := &model.OrderOperationLog{ + OrderId: orderServicePackage.OrderId, + OrderNo: orderServicePackage.OrderServiceNo, + OrderType: 4, + OperatorId: adminUserId, + OperationContent: "取消订单并退款", + } + + orderOperationLogDao := dao.OrderOperationLogDao{} + orderOperationLog, err = orderOperationLogDao.AddOrderOperationLog(tx, orderOperationLog) + if err != nil || orderOperationLog == nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + tx.Commit() + + return true, nil +} + +// 获取服务包当前月时间区间 +func (r *OrderServicePackageService) getOrderServicePackageCurrentMonthDate(startTime model.LocalTime) (startDate, finishDate time.Time, err error) { + if startTime.IsEmpty() { + return time.Time{}, time.Time{}, err + } + + // 获取当前时间 + now := time.Now().Unix() + + // 获取开启服务日期和今日的相差天数 + diff := math.Abs(float64(now - time.Time(startTime).Unix())) + diffDays := math.Ceil(diff / 60 / 60 / 24) + + // 获取当前月次 + monthTime := math.Ceil(diffDays / 30) // 向上取整 + + days := monthTime * 30 + + // 当前所属月结束时间 + currentMonthFinishDate := time.Time(startTime).AddDate(0, 0, int(days)) + + // 当前所属月开始时间 + currentMonthStartDate := currentMonthFinishDate.AddDate(0, 0, -30) + + return currentMonthStartDate, currentMonthFinishDate, nil +} + +// 检测问诊是否服务包首次问诊 +func (r *OrderServicePackageService) isFirstInquiryServicePackage(orderNo string) (bool, error) { + orderServicePackageInquiryDao := dao.OrderServicePackageInquiryDao{} + + maps := make(map[string]interface{}) + maps["order_service_no"] = orderNo + orderServicePackageInquiry, err := orderServicePackageInquiryDao.GetOrderServicePackageInquiryList(maps) + if err != nil { + return false, err + } + + if len(orderServicePackageInquiry) == 1 { + return true, nil + } + + return false, err +} + +// GetCurrentMonthInquiryCount 获取服务包当月已问诊次数 +func (r *OrderServicePackageService) GetCurrentMonthInquiryCount(orderServiceType int, userId, doctorId int64, startTime model.LocalTime) (int, error) { + orderInquiryDao := dao.OrderInquiryDao{} + + CurrentMonthStartDate, CurrentMonthFinishDate, err := r.getOrderServicePackageCurrentMonthDate(startTime) + + maps := make(map[string]interface{}) + maps["inquiry_type"] = 1 + + if orderServiceType == 1 { + maps["inquiry_mode"] = 8 + } else { + maps["inquiry_mode"] = 9 + } + + maps["user_id"] = userId + maps["doctor_id"] = doctorId + maps["inquiry_refund_status"] = 0 + maps["inquiry_pay_status"] = 2 + maps["inquiry_status"] = []int{1, 2, 3, 4, 5, 6} + orderInquirys, err := orderInquiryDao.GetOrderInquiryCreatedTimeList(maps, CurrentMonthStartDate.Format("2006-01-02 15:04:05"), CurrentMonthFinishDate.Format("2006-01-02 15:04:05")) + if err != nil { + return 0, err + } + + return len(orderInquirys), err +} + +// GetRemainingInquiryCount 获取服务包当月剩余问诊次数 +func (r *OrderServicePackageService) GetRemainingInquiryCount(monthlyFrequency, monthInquiryCount int) string { + result := "" + if monthlyFrequency != 0 { + monthInquiryCount = monthlyFrequency - monthInquiryCount + if monthInquiryCount < 0 { + result = "0" + } else { + result = strconv.Itoa(monthInquiryCount) + } + } else { + result = "不限" + } + return result +} + +// GetOrderServiceProductCanUseQuantity 获取服务包内某一药品的可使用数量 +func (r *OrderServicePackageService) GetOrderServiceProductCanUseQuantity(orderServiceId, productId int64, totalQuantity int) (int, error) { + orderServicePackageProductDao := dao.OrderServicePackageProductDao{} + + maps := make(map[string]interface{}) + maps["order_service_id"] = orderServiceId + maps["product_id"] = productId + orderServicePackageProducts, err := orderServicePackageProductDao.GetOrderServicePackageProductList(maps) + if err != nil { + return 0, err + } + + // 订单使用数量 + usedQuantity := 0 + for _, product := range orderServicePackageProducts { + usedQuantity = usedQuantity + product.UsedQuantity + } + + // 剩余数量 = 总数量-使用数量 + remainingQuantity := totalQuantity - usedQuantity + if remainingQuantity < 0 { + remainingQuantity = 0 + } + + return remainingQuantity, err +} + +// GetPatientFamilyInProgressServicePackage 获取患者家庭成员进行中的服务包订单 +func (r *OrderServicePackageService) GetPatientFamilyInProgressServicePackage(patientUserId, familyId, doctorId int64, serviceType int) (*model.OrderServicePackage, error) { + orderServicePackageDao := dao.OrderServicePackageDao{} + + maps := make(map[string]interface{}) + maps["user_id"] = patientUserId + maps["doctor_id"] = doctorId + maps["family_id"] = familyId + maps["order_service_type"] = serviceType + maps["order_service_status"] = 3 + orderServicePackage, err := orderServicePackageDao.GetOrderServicePackage(maps) + if err != nil { + return nil, err + } + + return orderServicePackage, err +} diff --git a/api/service/userDoctor.go b/api/service/userDoctor.go index 8905eb7..43a34aa 100644 --- a/api/service/userDoctor.go +++ b/api/service/userDoctor.go @@ -157,7 +157,7 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, req requests.PutUserDo if userDoctor.HospitalID != hospitalId { // 获取医院数据 - hospitalDao := dao.Hospital{} + hospitalDao := dao.HospitalDao{} hospital, err := hospitalDao.GetHospitalById(hospitalId) if err != nil || hospital == nil { return false, errors.New("医院错误") @@ -773,7 +773,7 @@ func (r *UserDoctorService) AddUserDoctor(userId string, req requests.AddUserDoc } // 获取医院数据 - hospitalDao := dao.Hospital{} + hospitalDao := dao.HospitalDao{} hospital, err := hospitalDao.GetHospitalById(hospitalId) if err != nil || hospital == nil { return false, errors.New("医院错误") @@ -1179,7 +1179,7 @@ func (r *UserDoctorService) PutUserDoctorPending(doctorId int64, req requests.Pu } // 获取医院名称 - hospitalDao := dao.Hospital{} + hospitalDao := dao.HospitalDao{} hospital, err := hospitalDao.GetHospitalById(userDoctor.HospitalID) if err != nil { return false, errors.New("审核失败") @@ -1925,3 +1925,29 @@ func (r *UserDoctorService) PutDoctorIntroduction(doctorId int64, req requests.P return true, nil } + +// GetDoctorMultiPointEnable 获取医生多点执业状态 +func (r *UserDoctorService) GetDoctorMultiPointEnable(doctorId int64) (int, error) { + doctorInquiryConfigDao := dao.DoctorInquiryConfigDao{} + userDoctorDao := dao.UserDoctorDao{} + + maps := make(map[string]interface{}) + maps["doctor_id"] = doctorId + maps["inquiry_type"] = 4 + maps["inquiry_mode"] = 1 + doctorInquiryConfig, err := doctorInquiryConfigDao.GetDoctorInquiryConfig(maps) + if err != nil || doctorInquiryConfig == nil { + return 0, nil + } + + userDoctor, err := userDoctorDao.GetUserDoctorById(doctorId) + if err != nil || userDoctor == nil { + return 0, errors.New("医生数据错误") + } + + if doctorInquiryConfig.IsEnable == 1 && userDoctor.MultiPointStatus == 1 { + return 1, nil + } + + return 0, nil +} diff --git a/config.yaml b/config.yaml index ef8b5a2..96ea071 100644 --- a/config.yaml +++ b/config.yaml @@ -72,6 +72,8 @@ wechat: patient-product-refund-notify-url: callback/wxpay/product/refund patient-detection-pay-notify-url: callback/wxpay/detection/success patient-detection-refund-notify-url: callback/wxpay/detection/refund + patient-service-pay-notify-url: callback/wxpay/service/success + patient-service-refund-notify-url: callback/wxpay/service/refund refund-notify-domain: https://dev.hospital.applets.igandanyiyuan.com/ doctor-app-id: wxc83296720404aa7b doctor-app-secret: 817665d3763637fe66d56548f8484622 @@ -95,4 +97,12 @@ pre: pre-plat-client-id: ZD-004 pre-plat-client-secret: 0baa5927164710b9f800bf33546b6da3 pre-plat-app-url: http://49.233.3.200:6304/api/thridapi/ - pre-plat-pharmacy-code: JG-10009 \ No newline at end of file + pre-plat-pharmacy-code: JG-10009 + +# [rabbitMq] +amqp: + host: 127.0.0.1 + port: 5672 + user: gdxz_2022rabbitmq + password: qwr2p&¥e@3.2p + vhost: gdxz_2022rabbitmq \ No newline at end of file diff --git a/config/amqp.go b/config/amqp.go new file mode 100644 index 0000000..f7d1c63 --- /dev/null +++ b/config/amqp.go @@ -0,0 +1,9 @@ +package config + +type Amqp struct { + Host string `mapstructure:"host" json:"host" yaml:"host"` // 服务器地址 + Port int `mapstructure:"port" json:"port" yaml:"port"` // 服务器端口 + Password string `mapstructure:"password" json:"password" yaml:"password"` // 密码 + User string `mapstructure:"user" json:"user" yaml:"user"` + Vhost string `mapstructure:"vhost" json:"vhost" yaml:"vhost"` +} diff --git a/config/config.go b/config/config.go index 1d6ead0..d805f13 100644 --- a/config/config.go +++ b/config/config.go @@ -16,4 +16,5 @@ type Config struct { Dysms Dysms `mapstructure:"dysms" json:"dysms" yaml:"dysms"` Wechat Wechat `mapstructure:"wechat" json:"wechat" yaml:"wechat"` Pre Pre `mapstructure:"pre" json:"pre" yaml:"pre"` // 处方平台 + Amqp Amqp `mapstructure:"amqp" json:"amqp" yaml:"amqp"` } diff --git a/config/wechat.go b/config/wechat.go index c13ba3d..ab46ef7 100644 --- a/config/wechat.go +++ b/config/wechat.go @@ -9,6 +9,8 @@ type Wechat struct { PatientProductRefundNotifyUrl string `mapstructure:"patient-product-refund-notify-url" json:"patient-product-refund-notify-url" yaml:"patient-product-refund-notify-url"` PatientDetectionPayNotifyUrl string `mapstructure:"patient-detection-pay-notify-url" json:"patient-detection-pay-notify-url" yaml:"patient-detection-pay-notify-url"` PatientDetectionRefundNotifyUrl string `mapstructure:"patient-detection-refund-notify-url" json:"patient-detection-refund-notify-url" yaml:"patient-detection-refund-notify-url"` + PatientServicePayNotifyUrl string `mapstructure:"patient-service-pay-notify-url" json:"patient-service-pay-notify-url" yaml:"patient-service-pay-notify-url"` + PatientServiceRefundNotifyUrl string `mapstructure:"patient-service-refund-notify-url" json:"patient-service-refund-notify-url" yaml:"patient-service-refund-notify-url"` RefundNotifyDomain string `mapstructure:"refund-notify-domain" json:"refund-notify-domain" yaml:"refund-notify-domain"` // 回调域名 DoctorAppId string `mapstructure:"doctor-app-id" json:"doctor-app-id" yaml:"doctor-app-id"` DoctorAppSecret string `mapstructure:"doctor-app-secret" json:"doctor-app-secret" yaml:"doctor-app-secret"` diff --git a/extend/rabbitMq/rabbitMq.go b/extend/rabbitMq/rabbitMq.go new file mode 100644 index 0000000..9b0e089 --- /dev/null +++ b/extend/rabbitMq/rabbitMq.go @@ -0,0 +1,155 @@ +package rabbitMq + +import ( + "encoding/json" + "fmt" + "github.com/streadway/amqp" + "hospital-admin-api/config" + "net/url" + "time" +) + +type RabbitMQ struct { + conn *amqp.Connection + channel *amqp.Channel +} + +// NewRabbitMQClient 初始化客户端 +func NewRabbitMQClient() (*RabbitMQ, error) { + m := config.C.Amqp + + user := url.QueryEscape(m.User) + password := url.QueryEscape(m.Password) + + dsn := fmt.Sprintf("amqp://%s:%s@%s:%d/%s", user, password, m.Host, m.Port, m.Vhost) + conn, err := amqp.Dial(dsn) + if err != nil { + return nil, err + } + + ch, err := conn.Channel() + if err != nil { + return nil, err + } + + return &RabbitMQ{ + conn: conn, + channel: ch, + }, nil +} + +// Publish 生产 +func (r *RabbitMQ) Publish(queueName, exchangeName, routingKey string, message interface{}) error { + _, err := r.channel.QueueDeclare( + queueName, // 队列名字 + true, // 消息是否持久化 + false, // 不使用的时候删除队列 + false, // 是否排他 + false, // 是否阻塞 + nil, // arguments + ) + if err != nil { + return err + } + + body, err := json.Marshal(message) + if err != nil { + return err + } + + err = r.channel.Publish( + exchangeName, // exchange(交换机名字) + routingKey, // + false, // 是否为无法路由的消息进行返回处理 + false, // 是否对路由到无消费者队列的消息进行返回处理 RabbitMQ 3.0 废弃 + amqp.Publishing{ + ContentType: "text/plain", + Body: body, // 消息内容 + }) + if err != nil { + return err + } + + return nil +} + +func (r *RabbitMQ) PublishWithDelay(queueName, exchangeName, routingKey string, message interface{}, delay time.Duration) error { + err := r.channel.ExchangeDeclare( + queueName, // name + "x-delayed-message", // type + true, // durable + false, // auto-deleted + false, // internal + false, // 阻塞处理 + amqp.Table{"x-delayed-type": "direct"}, // arguments + ) + if err != nil { + return err + } + + body, err := json.Marshal(message) + if err != nil { + return err + } + + err = r.channel.Publish( + exchangeName, // exchange + routingKey, // routing key + false, // 是否为无法路由的消息进行返回处理 + false, // 是否对路由到无消费者队列的消息进行返回处理 RabbitMQ 3.0 废弃 + amqp.Publishing{ + ContentType: "text/plain", + Body: body, + Headers: amqp.Table{"x-delay": int32(delay / time.Millisecond)}, + }) + if err != nil { + return err + } + + return nil +} + +// Consume 消费 +func (r *RabbitMQ) Consume(queueName string) (<-chan amqp.Delivery, error) { + q, err := r.channel.QueueDeclare( + queueName, // 队列名称 + false, // 是否持久化 + false, // 是否自动删除队列 + false, // 排他 + false, // 阻塞处理 + nil, // arguments + ) + if err != nil { + return nil, err + } + + msgs, err := r.channel.Consume( + q.Name, // queue + "", // consumer + true, // auto-ack + false, // exclusive + false, // no-local + false, // no-wait + nil, // args + ) + if err != nil { + return nil, err + } + + return msgs, nil +} + +func (r *RabbitMQ) Close() { + if r.channel != nil { + err := r.channel.Close() + if err != nil { + return + } + } + if r.conn != nil { + err := r.conn.Close() + if err != nil { + return + } + } +} diff --git a/extend/tencentIm/base.go b/extend/tencentIm/base.go index 07d2479..2cea9f4 100644 --- a/extend/tencentIm/base.go +++ b/extend/tencentIm/base.go @@ -58,52 +58,6 @@ func getRequestUrlParams(userId string) (bool, string) { return true, queryString } -// -// // 统一请求 -// func postRequest(url string, requestBody []byte) (map[string]interface{}, error) { -// responseMap := make(map[string]interface{}) -// -// // 发起 POST 请求 -// resp, err := http.Post(url, "application/json", bytes.NewBuffer(requestBody)) -// if err != nil { -// return nil, err -// } -// -// defer func(Body io.ReadCloser) { -// _ = Body.Close() -// }(resp.Body) -// -// body, err := io.ReadAll(resp.Body) -// if err != nil { -// return nil, err -// } -// -// err = json.Unmarshal([]byte(string(body)), &responseMap) -// if err != nil { -// // json解析失败 -// return nil, err -// } -// -// if responseMap == nil { -// return nil, errors.New("请求im失败") -// } -// -// if _, ok := responseMap["ErrorCode"]; ok { -// errorCode := responseMap["ErrorCode"].(int) -// if errorCode != 0 { -// if errorInfo, ok := responseMap["ErrorInfo"].(string); ok { -// return nil, errors.New(errorInfo) -// } else { -// return nil, errors.New("请求im失败") -// } -// } -// } else { -// return nil, errors.New("请求im失败") -// } -// -// return responseMap, nil -// } - // 统一请求 func postRequest(url string, requestBody []byte) (*responseData, error) { var responseData responseData diff --git a/extend/weChat/weChatPay.go b/extend/weChat/weChatPay.go index 85aa982..0a3ea0b 100644 --- a/extend/weChat/weChatPay.go +++ b/extend/weChat/weChatPay.go @@ -38,6 +38,11 @@ func (r RefundRequest) Refund(orderType int) (*refunddomestic.Refund, error) { mchId = config.C.Wechat.Pay1636644248.MchId mchCertificateSerialNumber = config.C.Wechat.Pay1636644248.MchCertificateSerialNumber v3ApiSecret = config.C.Wechat.Pay1636644248.V3ApiSecret + } else if orderType == 4 { + // 服务包 + mchId = config.C.Wechat.Pay1659662936.MchId + mchCertificateSerialNumber = config.C.Wechat.Pay1659662936.MchCertificateSerialNumber + v3ApiSecret = config.C.Wechat.Pay1659662936.V3ApiSecret } if mchId == "" { diff --git a/go.mod b/go.mod index c7f6e05..d021d6c 100644 --- a/go.mod +++ b/go.mod @@ -3,43 +3,41 @@ module hospital-admin-api go 1.19 require ( + github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4 + github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6 + github.com/alibabacloud-go/tea v1.1.19 + github.com/alibabacloud-go/tea-utils/v2 v2.0.3 + github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible + github.com/bwmarrin/snowflake v0.3.0 github.com/facebookarchive/grace v0.0.0-20180706040059-75cf19382434 github.com/fsnotify/fsnotify v1.6.0 + github.com/gen2brain/go-fitz v1.23.7 github.com/gin-gonic/gin v1.9.0 github.com/go-playground/locales v0.14.1 github.com/go-playground/universal-translator v0.18.1 github.com/go-playground/validator/v10 v10.14.0 github.com/go-redis/redis/v8 v8.11.5 github.com/golang-jwt/jwt/v5 v5.0.0 + github.com/google/uuid v1.3.0 github.com/mojocn/base64Captcha v1.3.5 + github.com/shopspring/decimal v1.3.1 github.com/sirupsen/logrus v1.9.2 github.com/spf13/viper v1.16.0 + github.com/streadway/amqp v1.1.0 + github.com/wechatpay-apiv3/wechatpay-go v0.2.17 + github.com/xuri/excelize/v2 v2.8.0 gorm.io/driver/mysql v1.5.1 gorm.io/gorm v1.25.1 ) require ( github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect - github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4 // indirect github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect - github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6 // indirect github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect - github.com/alibabacloud-go/facebody-20191230 v1.1.12 // indirect github.com/alibabacloud-go/openapi-util v0.1.0 // indirect - github.com/alibabacloud-go/openplatform-20191219 v1.1.5 // indirect - github.com/alibabacloud-go/tea v1.1.19 // indirect - github.com/alibabacloud-go/tea-fileform v1.1.0 // indirect - github.com/alibabacloud-go/tea-oss-sdk v1.1.0 // indirect - github.com/alibabacloud-go/tea-oss-utils v1.1.0 // indirect - github.com/alibabacloud-go/tea-rpc v1.3.3 // indirect - github.com/alibabacloud-go/tea-rpc-utils v1.1.2 // indirect github.com/alibabacloud-go/tea-utils v1.3.5 // indirect - github.com/alibabacloud-go/tea-utils/v2 v2.0.3 // indirect github.com/alibabacloud-go/tea-xml v1.1.2 // indirect - github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible // indirect github.com/aliyun/credentials-go v1.1.2 // indirect - github.com/bitly/go-simplejson v0.5.1 // indirect - github.com/bwmarrin/snowflake v0.3.0 // indirect github.com/bytedance/sonic v1.9.1 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect @@ -58,7 +56,6 @@ require ( github.com/go-sql-driver/mysql v1.7.1 // indirect github.com/goccy/go-json v0.10.2 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect - github.com/google/uuid v1.3.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect @@ -74,19 +71,15 @@ require ( github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/richardlehane/mscfb v1.0.4 // indirect github.com/richardlehane/msoleps v1.0.3 // indirect - github.com/shopspring/decimal v1.3.1 // indirect github.com/spf13/afero v1.9.5 // indirect github.com/spf13/cast v1.5.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.4.2 // indirect - github.com/tencentcloud/tencentcloud-sdk-go v3.0.233+incompatible // indirect github.com/tjfoc/gmsm v1.3.2 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect - github.com/wechatpay-apiv3/wechatpay-go v0.2.17 // indirect github.com/xuri/efp v0.0.0-20230802181842-ad255f2331ca // indirect - github.com/xuri/excelize/v2 v2.8.0 // indirect github.com/xuri/nfp v0.0.0-20230819163627-dc951e3ffe1a // indirect golang.org/x/arch v0.3.0 // indirect golang.org/x/crypto v0.12.0 // indirect diff --git a/go.sum b/go.sum index 26edb0a..dfc270a 100644 --- a/go.sum +++ b/go.sum @@ -38,6 +38,7 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw= github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo= github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc= @@ -50,53 +51,27 @@ github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6 h1:UTl97mt2qfavxveqCkaVg4 github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6/go.mod h1:UWpcGrWwTbES9QW7OQ7xDffukMJ/l7lzioixIz8+lgY= github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q= github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE= -github.com/alibabacloud-go/facebody-20191230 v1.1.12 h1:FQ45N0Tks6MvCezdFIc/ZL8ZhtAEJ6Pi1RLJmv7CS/s= -github.com/alibabacloud-go/facebody-20191230 v1.1.12/go.mod h1:u/DWpOyFof4FxMomUBCcdvkLBBBV1aBRhZFhSddO294= github.com/alibabacloud-go/openapi-util v0.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= github.com/alibabacloud-go/openapi-util v0.1.0 h1:0z75cIULkDrdEhkLWgi9tnLe+KhAFE/r5Pb3312/eAY= github.com/alibabacloud-go/openapi-util v0.1.0/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= -github.com/alibabacloud-go/openplatform-20191219 v1.1.5 h1:NQdRXirBxoNrI9MbaaTxbHJKsUS+uga1inKMAcnuFPI= -github.com/alibabacloud-go/openplatform-20191219 v1.1.5/go.mod h1:GfQnFm82wfSsJ0a+bETDqPW64tXUzcw2u2o2i7OacH8= github.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg= github.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= -github.com/alibabacloud-go/tea v1.1.10/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= github.com/alibabacloud-go/tea v1.1.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= github.com/alibabacloud-go/tea v1.1.19 h1:Xroq0M+pr0mC834Djj3Fl4ZA8+GGoA0i7aWse1vmgf4= github.com/alibabacloud-go/tea v1.1.19/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= -github.com/alibabacloud-go/tea-fileform v1.1.0 h1:Qt33K9WCaONMhSetPWquog/QAk0xp9zB2uuhK8/gnyc= -github.com/alibabacloud-go/tea-fileform v1.1.0/go.mod h1:1seBx6+yrLZ5GFYrb8O1EnHvih1wXajQNE5TQNkhLd4= -github.com/alibabacloud-go/tea-oss-sdk v1.1.0 h1:LX6XDD9E5AGgIh9IrNMIcaUOUJE8nz8DaV9FiB2/Ewc= -github.com/alibabacloud-go/tea-oss-sdk v1.1.0/go.mod h1:xpyYJtYKYzJB7JBKyTxoYEfPxcvONfOU/gAjBFeQzRc= -github.com/alibabacloud-go/tea-oss-utils v1.1.0 h1:y65crjjcZ2Pbb6UZtC2deuIZHDVTS3IaDWE7M9nVLRc= -github.com/alibabacloud-go/tea-oss-utils v1.1.0/go.mod h1:PFCF12e9yEKyBUIn7X1IrF/pNjvxgkHy0CgxX4+xRuY= -github.com/alibabacloud-go/tea-rpc v1.1.3/go.mod h1:uwhvnxPK69jcAYkVyP1WCFhTh1oVLiibUseSUpC7L8g= -github.com/alibabacloud-go/tea-rpc v1.1.7/go.mod h1:FU//dNbNYv1jSz1BGj6Sc3Co0IrbWsCnPiB/e1YnvgQ= -github.com/alibabacloud-go/tea-rpc v1.3.3 h1:NZJtukZouR0jpN0dWeBB5bMZdVvTyRPyISxc/hfOALo= -github.com/alibabacloud-go/tea-rpc v1.3.3/go.mod h1:zwKwxuf92liNsPcLOxPdrkvR5Dq6jtX2du6qx8FT094= -github.com/alibabacloud-go/tea-rpc-utils v1.1.0/go.mod h1:rxGY+fLbm3Fj3oJpeU0hBTmz52Ux50nm7JL01tyPv9c= -github.com/alibabacloud-go/tea-rpc-utils v1.1.1/go.mod h1:V5HdNi6Xdn0JMpgVhQ19vsFAS51tydr7BqcJtuXH1Yw= -github.com/alibabacloud-go/tea-rpc-utils v1.1.2 h1:ZTfFREnP2q9D49T2J/1jYYOndepGdrUOgm/JR8/bIQ0= -github.com/alibabacloud-go/tea-rpc-utils v1.1.2/go.mod h1:V5HdNi6Xdn0JMpgVhQ19vsFAS51tydr7BqcJtuXH1Yw= -github.com/alibabacloud-go/tea-utils v1.1.0/go.mod h1:kx2tz0XYhq6igVQCHhCPmOQK4r5LXK0rJUJxiS3VvPg= -github.com/alibabacloud-go/tea-utils v1.3.0/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= -github.com/alibabacloud-go/tea-utils v1.3.4/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= github.com/alibabacloud-go/tea-utils v1.3.5 h1:NqtVd9PlYqrFDG8cjXn5eCxMo1Qi1gbhN7DA2vptD7w= github.com/alibabacloud-go/tea-utils v1.3.5/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= github.com/alibabacloud-go/tea-utils/v2 v2.0.0/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4= github.com/alibabacloud-go/tea-utils/v2 v2.0.3 h1:6OM8vm/6pjQg1a7zc3QNMviaoumnhImRi5V84CnuFkc= github.com/alibabacloud-go/tea-utils/v2 v2.0.3/go.mod h1:sj1PbjPodAVTqGTA3olprfeeqqmwD0A5OQz94o9EuXQ= -github.com/alibabacloud-go/tea-xml v1.1.0/go.mod h1:V/VlXBTCRN0OBvIjtaIXdpU6YAbyofXrIRWCfQ7u47U= github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M= github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible h1:KpbJFXwhVeuxNtBJ74MCGbIoaBok2uZvkD7QXp2+Wis= github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= -github.com/aliyun/credentials-go v1.1.0/go.mod h1:ZXrrxv386Mj6z8NpihLKpexQE550m7j3LlyCvYub9aE= github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY= github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw= -github.com/bitly/go-simplejson v0.5.1 h1:xgwPbetQScXt1gh9BmoJ6j9JMr3TElvuIyjR8pgdoow= -github.com/bitly/go-simplejson v0.5.1/go.mod h1:YOPVLzCfwK14b4Sff3oP1AmGhI9T9Vsg84etUnlyp+Q= github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= @@ -151,6 +126,8 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/gen2brain/go-fitz v1.23.7 h1:HPhzEVzmOINvCKqQgB/DwMzYh4ArIgy3tMwq1eJTcbg= +github.com/gen2brain/go-fitz v1.23.7/go.mod h1:HU04vc+RisUh/kvEd2pB0LAxmK1oyXdN4ftyshUr9rQ= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= @@ -283,6 +260,7 @@ github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/mojocn/base64Captcha v1.3.5 h1:Qeilr7Ta6eDtG4S+tQuZ5+hO+QHbiGAJdi4PfoagaA0= github.com/mojocn/base64Captcha v1.3.5/go.mod h1:/tTTXn4WTpX9CfrmipqRytCpJ27Uw3G6I7NcP2WwcmY= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= @@ -318,6 +296,8 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= +github.com/streadway/amqp v1.1.0 h1:py12iX8XSyI7aN/3dUT8DFIDJazNJsVJdxNVEpnQTZM= +github.com/streadway/amqp v1.1.0/go.mod h1:WYSrTEYHOXHd0nwFeUXAe2G2hRnQT+deZJJf88uS9Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -335,8 +315,6 @@ github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gt github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/tencentcloud/tencentcloud-sdk-go v3.0.233+incompatible h1:q+D/Y9jla3afgsIihtyhwyl0c2W+eRWNM9ohVwPiiPw= -github.com/tencentcloud/tencentcloud-sdk-go v3.0.233+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4= github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM= github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= @@ -376,8 +354,6 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -393,8 +369,6 @@ golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMk golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.7.0 h1:gzS29xtG1J5ybQlv0PuyfE3nmc6R4qB73m6LUUmvFuw= -golang.org/x/image v0.7.0/go.mod h1:nd/q4ef1AKKYl/4kft7g+6UyGbdiqWqTP1ZAbRoV7Rg= golang.org/x/image v0.11.0 h1:ds2RoQvBvYTiJkwpSFDwCcDFNX7DqjL2WsUgTNk0Ooo= golang.org/x/image v0.11.0/go.mod h1:bglhjqbqVuEb9e9+eNR45Jfu7D+T4Qan+NhQk8Ck2P8= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -455,7 +429,6 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= @@ -523,7 +496,6 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -541,14 +513,12 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -698,7 +668,6 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/utils/compute.go b/utils/compute.go index 71dcfe8..1370d56 100644 --- a/utils/compute.go +++ b/utils/compute.go @@ -1,5 +1,13 @@ package utils +import ( + "fmt" + "github.com/gen2brain/go-fitz" + "image/jpeg" + "os" + "path/filepath" +) + // 一些计算 // ComputeIndividualIncomeTax 计算个人所得税 @@ -35,3 +43,43 @@ func ComputeIndividualIncomeTax(income float64) float64 { return incomeTax } + +// ConvertPDFToImages converts a PDF file to images and saves them in the specified output directory. +func ConvertPDFToImages(pdfPath string, outputDir string, filename string) error { + // Open the PDF file + doc, err := fitz.New(pdfPath) + if err != nil { + return fmt.Errorf("failed to open PDF file: %v", err) + } + defer doc.Close() + + // Ensure the output directory exists + if err := os.MkdirAll(outputDir, os.ModePerm); err != nil { + return fmt.Errorf("failed to create output directory: %v", err) + } + + // Iterate over each page in the PDF + for i := 0; i < doc.NumPage(); i++ { + // Render the page to an image + img, err := doc.Image(i) + if err != nil { + return fmt.Errorf("failed to render page %d: %v", i, err) + } + + // Create the output file + outputFile := filepath.Join(outputDir, filename) + file, err := os.Create(outputFile) + if err != nil { + return fmt.Errorf("failed to create output file: %v", err) + } + defer file.Close() + + // Encode the image as JPEG and save it to the file + opts := &jpeg.Options{Quality: 80} + if err := jpeg.Encode(file, img, opts); err != nil { + return fmt.Errorf("failed to encode image: %v", err) + } + } + + return nil +} diff --git a/utils/intToString.go b/utils/intToString.go index 26f2a11..90d6fd5 100644 --- a/utils/intToString.go +++ b/utils/intToString.go @@ -565,3 +565,121 @@ func IsAutoPharVerifyToString(i int) string { return "" } } + +// IsProductStatusToString 商品状态(1:正常 2:下架) +func IsProductStatusToString(i int) string { + switch i { + case 0: + return "下架" + case 1: + return "正常" + default: + return "" + } +} + +// IsIsDeleteToString 是否删除(0:否 1:是) +func IsIsDeleteToString(i int) string { + switch i { + case 0: + return "否" + case 1: + return "是" + default: + return "" + } +} + +// IsProductTypeToString 药品类型(0:未知 1:中成药 2:西药) +func IsProductTypeToString(i int) string { + switch i { + case 0: + return "未知" + case 1: + return "中成药" + case 2: + return "西药" + default: + return "" + } +} + +// OrderServiceTypeToString 服务包类型(1:健康包 2:随访包) +func OrderServiceTypeToString(i int) string { + switch i { + case 1: + return "健康包" + case 2: + return "随访包" + default: + return "" + } +} + +// OrderServiceStatusToString 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) +func OrderServiceStatusToString(i int) string { + switch i { + case 1: + return "待支付" + case 2: + return "未开始" + case 3: + return "服务中" + case 4: + return "服务完成" + case 5: + return "服务取消" + default: + return "" + } +} + +// OrderServicePackageCancelReasonToString 取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时) +func OrderServicePackageCancelReasonToString(i int) string { + switch i { + case 1: + return "医生未接受服务" + case 2: + return "主动取消" + case 3: + return "客服取消" + case 4: + return "支付超时" + default: + return "" + } +} + +// AddFinishStatusToString 添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败) +func AddFinishStatusToString(i int) string { + switch i { + case 0: + return "未添加" + case 1: + return "已添加" + case 2: + return "添加失败" + default: + return "未知" + } +} + +// CouponInquiryTypeToString 关联问诊类型,application_scope=问诊时存在生效,逗号分隔(1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药 6:检测) +func CouponInquiryTypeToString(i int) string { + switch i { + case 1: + return "全部" + case 2: + return "快速问诊" + case 3: + return "专家问诊" + case 4: + return "公益问诊" + case 5: + return "问诊购药" + case 6: + return "检测" + default: + return "未知" + } +}