You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
5.4 KiB
Go
210 lines
5.4 KiB
Go
5 months ago
|
package service
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"errors"
|
||
|
"gorm.io/gorm"
|
||
|
"insure/e"
|
||
|
"insure/global"
|
||
|
"insure/model"
|
||
|
"insure/third_party/signer"
|
||
|
"insure/third_party/suixing"
|
||
|
"insure/utils"
|
||
|
"strconv"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
var OrderService = orderService{}
|
||
|
|
||
|
type orderService struct {
|
||
|
}
|
||
|
|
||
|
func (s *orderService) CreateOrder(param suixing.CommonParam) (*model.Order, error) {
|
||
|
orderSn := utils.GenerateNo("order")
|
||
|
|
||
|
orderParam := &suixing.Order{}
|
||
|
err := json.Unmarshal([]byte(param.Data), &orderParam)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
order, err := s.saveOrder(orderSn, param.RequestID)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
user, err := s.saveUser(orderSn, orderParam.User)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
project, err := s.saveProject(orderSn, orderParam.Project)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
applicant, err := s.saveApplicant(orderSn, orderParam.Applicant)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
assured, err := s.saveAssured(orderSn, orderParam.Assured)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
order.User = user
|
||
|
order.Applicant = applicant
|
||
|
order.Project = project
|
||
|
order.Assured = assured
|
||
|
return order, nil
|
||
|
}
|
||
|
|
||
|
func (s *orderService) saveOrder(orderSn string, requestID string) (*model.Order, error) {
|
||
|
o := model.Order{}
|
||
|
o.Token = utils.Md5(orderSn + utils.GenerateRandomString(10) + strconv.Itoa(int(time.Now().UnixMicro())))
|
||
|
o.OrderSn = orderSn
|
||
|
o.RequestID = requestID
|
||
|
err := global.DB.Save(&o).Error
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &o, nil
|
||
|
}
|
||
|
|
||
|
func (s *orderService) saveUser(orderSn string, user suixing.User) (*model.User, error) {
|
||
|
u := model.User{}
|
||
|
u.OrderSn = orderSn
|
||
|
u.UserID = user.UserID
|
||
|
u.Username = user.Username
|
||
|
u.Mobile = user.Mobile
|
||
|
u.UnitID = user.UnitID
|
||
|
u.UnitName = user.UnitName
|
||
|
u.BankUserName = user.BankUserName
|
||
|
u.BankName = user.BankName
|
||
|
u.BankCardName = user.BankCardName
|
||
|
u.BeiandiquCode = user.BeiandiquCode
|
||
|
err := global.DB.Save(&u).Error
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &u, nil
|
||
|
}
|
||
|
|
||
|
func (s *orderService) saveProject(orderSn string, project suixing.Project) (*model.Project, error) {
|
||
|
p := model.Project{}
|
||
|
p.OrderSn = orderSn
|
||
|
p.Name = project.Name
|
||
|
p.TpID = project.TpID
|
||
|
p.BdID = project.BdID
|
||
|
p.BdName = project.BdName
|
||
|
p.StartDate = project.StartDate
|
||
|
p.Amount = project.Amount
|
||
|
p.Province = project.Province
|
||
|
p.City = project.City
|
||
|
p.District = project.District
|
||
|
p.BzjEtime = project.BzjEtime
|
||
|
p.CreateTime = project.CreateTime
|
||
|
p.PlanDate = project.PlanDate
|
||
|
p.BuildPrice = project.BuildPrice
|
||
|
p.BuildPlace = project.BuildPlace
|
||
|
p.TenderProjectType = project.TenderProjectType
|
||
|
p.ValidPeriod = project.ValidPeriod
|
||
|
p.TenderNoticeUrl = project.TenderNoticeUrl
|
||
|
p.TenderFileUrl = project.TenderFileUrl
|
||
|
p.TenderFileUrlMd5 = project.TenderFileUrlMd5
|
||
|
p.ProjectApprovalNo = project.ProjectApprovalNo
|
||
|
err := global.DB.Save(&p).Error
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &p, nil
|
||
|
}
|
||
|
|
||
|
func (s *orderService) saveApplicant(orderSn string, applicant suixing.Applicant) (*model.Applicant, error) {
|
||
|
licenseFiles, err := json.Marshal(applicant.LicenseFiles)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
a := model.Applicant{}
|
||
|
a.OrderSn = orderSn
|
||
|
a.ApplicantName = applicant.ApplicantName
|
||
|
a.CreditVld = applicant.CreditVld
|
||
|
a.CreditCode = applicant.CreditCode
|
||
|
a.ContactName = applicant.ContactName
|
||
|
a.ContactMobile = applicant.ContactMobile
|
||
|
a.ComTelArea = applicant.ComTelArea
|
||
|
a.Province = applicant.Province
|
||
|
a.City = applicant.City
|
||
|
a.District = applicant.District
|
||
|
a.Address = applicant.Address
|
||
|
a.Email = applicant.Email
|
||
|
a.LegalName = applicant.LegalName
|
||
|
a.LegalNum = applicant.LegalNum
|
||
|
a.ComTelNum = applicant.ComTelNum
|
||
|
a.LicenseFiles = string(licenseFiles)
|
||
|
a.SignUrl = applicant.SignUrl
|
||
|
err = global.DB.Save(&a).Error
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &a, nil
|
||
|
}
|
||
|
|
||
|
func (s *orderService) saveAssured(orderSn string, assured suixing.Assured) (*model.Assured, error) {
|
||
|
a := model.Assured{}
|
||
|
a.OrderSn = orderSn
|
||
|
a.AssuredName = assured.AssuredName
|
||
|
a.CreditVld = assured.CreditVld
|
||
|
a.CreditCode = assured.CreditCode
|
||
|
a.ContactName = assured.ContactName
|
||
|
a.ContactMobile = assured.ContactMobile
|
||
|
a.ComTelArea = assured.ComTelArea
|
||
|
a.Province = assured.Province
|
||
|
a.City = assured.City
|
||
|
a.District = assured.District
|
||
|
a.Address = assured.Address
|
||
|
a.TenderBankAccount = assured.TenderBankAccount
|
||
|
a.TenderBankOpenbank = assured.TenderBankOpenbank
|
||
|
a.TenderAccountName = assured.TenderAccountName
|
||
|
a.Agency = assured.Agency
|
||
|
a.ComTelNum = assured.ComTelNum
|
||
|
err := global.DB.Save(&a).Error
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &a, nil
|
||
|
}
|
||
|
|
||
|
func (s *orderService) GetOrderByToken(token string) (*model.Order, error) {
|
||
|
order := model.Order{}
|
||
|
err := global.DB.Preload("User").Preload("Project").Preload("Applicant").Preload("Assured").Where("token", token).First(&order).Error
|
||
|
if err != nil {
|
||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||
|
return nil, e.NewError("记录不存在")
|
||
|
} else {
|
||
|
return nil, e.NewError("数据异常")
|
||
|
}
|
||
|
}
|
||
|
return &order, nil
|
||
|
}
|
||
|
|
||
|
func (s *orderService) AddSignLog(orderSn string, param signer.UploadParam) (*model.SignLog, error) {
|
||
|
var err error
|
||
|
isUploadPdf := 1
|
||
|
if param.IsUploadPdf != "" {
|
||
|
isUploadPdf, err = strconv.Atoi(param.IsUploadPdf)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
l := model.SignLog{}
|
||
|
l.OrderSn = orderSn
|
||
|
l.Params = param.Params
|
||
|
l.CaInfo = param.CaInfo
|
||
|
l.IsUploadPdf = isUploadPdf
|
||
|
l.FileInfo = param.FileInfo
|
||
|
l.PcInfo = param.PcInfo
|
||
|
err = global.DB.Save(&l).Error
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &l, nil
|
||
|
}
|