You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1200 lines
38 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package gys
import (
"encoding/base64"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"github.com/golangkit/formatime"
"github.com/jinzhu/gorm"
"github.com/shopspring/decimal"
"io/ioutil"
"log"
"path/filepath"
"recook/configs"
"recook/internal/api/manage/gys/logic"
"recook/internal/back"
"recook/internal/dbc"
"recook/internal/libs/aliyun"
"recook/internal/libs/bean"
"recook/internal/libs/juhe"
"recook/internal/libs/tianyan"
"recook/internal/model/gys"
"recook/internal/model/manage"
"recook/internal/model/vend"
"recook/internal/static_path"
"recook/tools"
"strconv"
"time"
)
type Enterprise struct {
base
}
type replyStatus struct {
Status string `json:"status"`
StateInfo string `json:"stateInfo"`
Name string `json:"name"`
Email string `json:"email"`
Contract string `json:"contract"`
}
// @Style 状态查询
func (e *Enterprise) Status(c *gin.Context) {
userId, err := e.GetGysIdByWs(c)
if err != nil {
back.Fail(c, err.Error())
return
}
state := vend.GysEnterpriseState{}
dbc.DB.First(&state, "user_id = ?", userId)
if state.ID > 0 {
// 认证成功
email := ""
Contract := ""
if state.State == "2" {
sector := vend.GysEnterpriseSector{}
dbc.DB.First(&sector, "enterprise_id = ? and `type` = ?", state.ID, vend.Sector_Type_Sales)
email = sector.Email
if tools.FileExist(filepath.Join(static_path.Dir.Root, "/contract/pdf/瑞库客平台合作协议_"+state.ContractNo+".pdf")) {
Contract = "/contract/pdf/瑞库客平台合作协议_" + state.ContractNo + ".pdf"
}
}
back.Suc(c, "操作成功", replyStatus{Status: state.State, StateInfo: state.StateInfo, Name: state.EnterpriseName, Email: email, Contract: Contract})
return
}
back.Suc(c, "操作成功", replyStatus{Status: "0"})
return
}
type replyFillData struct {
CompanyId uint `json:"companyId" form:"companyId"`
LicenseUrl string `json:"licenseUrl" form:"licenseUrl"`
LegalPersonUrl string `json:"legalPersonUrl" form:"legalPersonUrl"`
PaytaxesUrl string `json:"paytaxesUrl" form:"paytaxesUrl"`
AccountUrl string `json:"accountUrl" form:"accountUrl"`
BankName string `json:"bankName" form:"bankName"` // 开户行
BankCode string `json:"bankCode" form:"bankCode"` // 银行账户
Address string `json:"address" form:"address"` // 地址
PayTaxes int `json:"payTaxes" form:"payTaxes"`
Sales logic.Sector `json:"sales"` // 业务联系人
SourceId uint `json:"sourceId" form:"sourceId"`
Name string `json:"name"`
RegNum string `json:"regNum"`
LegalPersonName string `json:"legalPersonName"`
IsCreditCode int `json:"isCreditCode"`
TaxNumber string `json:"taxNumber"`
FormTime string `json:"formTime"`
ToTime string `json:"toTime"`
OperationAddress string `json:"operationAddress"`
Tel string `json:"tel"`
}
func (e *Enterprise) FillData(c *gin.Context) {
userId, err := e.GetGysIdByWs(c)
if err != nil {
back.Fail(c, err.Error())
return
}
state := vend.GysEnterpriseState{}
dbc.DB.Table("gys_enterprise_state").First(&state, "user_id = ?", userId)
if state.ID > 0 {
if state.State == "1" {
back.Fail(c, "账户审核中")
return
}
if state.State == "2" {
back.Fail(c, "账户已审核通过")
return
}
}
log.Println(state)
sector := vend.GysEnterpriseSector{}
dbc.DB.First(&sector, "enterprise_id = ? and `type` = ?", state.ID, vend.Sector_Type_Sales)
companyBase := gys.GysCompanyBase{}
dbc.DB.First(&companyBase, "id = ?", state.CompanyId)
result := replyFillData{
CompanyId: state.CompanyId,
LicenseUrl: state.LicenseUrl,
LegalPersonUrl: state.LegalPersonUrl,
PaytaxesUrl: state.PaytaxesUrl,
AccountUrl: state.AccountUrl,
BankName: state.BankName,
BankCode: state.BankCode,
Address: state.Address,
PayTaxes: state.PayTaxes,
Sales: logic.Sector{
Name: sector.Name,
Phone: sector.Phone,
Email: sector.Email,
Position: sector.Position,
},
SourceId: state.Source,
Name: state.EnterpriseName,
RegNum: state.EnterpriseCode,
LegalPersonName: state.LegalPerson,
IsCreditCode: companyBase.IsCreditCode,
TaxNumber: state.TaxNumber,
FormTime: state.BusinessStart,
ToTime: state.BusinessEnd,
OperationAddress: state.OperationAddress,
Tel: state.Tel,
}
back.Suc(c, "操作成功", result)
return
}
type argsLicense struct {
LicenseUrl string `json:"licenseUrl" form:"licenseUrl"`
}
type replyLicense struct {
Name string `json:"name"`
RegNum string `json:"regNum"`
}
// @Style 营业执照识别
func (e *Enterprise) License(c *gin.Context) {
userId, err := e.GetGysIdByWs(c)
if err != nil {
back.Fail(c, err.Error())
return
}
args := argsLicense{}
if err := tools.Params(&args, c); err != nil {
back.Fail(c, err.Error())
return
}
if args.LicenseUrl == "" {
back.Fail(c, "参数错误")
return
}
state := vend.GysEnterpriseState{}
dbc.DB.Table("gys_enterprise_state").First(&state, "user_id = ?", userId)
if state.ID > 0 {
if state.State == "1" {
back.Fail(c, "账户审核中")
return
}
if state.State == "2" {
back.Fail(c, "账户已审核通过")
return
}
}
licenseInfo := gys.OcrBusinessLicense{}
dbc.DB.First(&licenseInfo, "img_path = ?", args.LicenseUrl)
if licenseInfo.Id > 0 {
back.Suc(c, "操作成功", replyLicense{
Name: licenseInfo.Name,
RegNum: licenseInfo.RegNum,
})
return
}
date := time.Now().Format("20060102")
i, _ := dbc.Rds.Get(fmt.Sprintf("ocr:license:%v:user:%v", date, userId)).Int()
if i < 10 {
dbc.Rds.Set(fmt.Sprintf("ocr:license:%v:user:%v", date, userId), i+1, time.Hour*24)
file, err := ioutil.ReadFile(static_path.Dir.Root + args.LicenseUrl)
if err != nil {
back.Fail(c, "图片错误")
return
}
license, err := aliyun.Ocr.BusinessLicense(base64.StdEncoding.EncodeToString(file))
if err != nil {
log.Println(err)
back.Fail(c, "未识别出营业执照信息,请重拍或着手动填写")
return
}
isSuccess := 0
if license.Success {
isSuccess = 1
}
dbc.DB.Create(&gys.OcrBusinessLicense{
ImgPath: args.LicenseUrl,
IsSuccess: isSuccess,
Name: license.Name,
RegNum: license.RegNum,
})
back.Suc(c, "操作成功", replyLicense{
Name: license.Name,
RegNum: license.RegNum,
})
return
} else {
back.Fail(c, "图片识别每日限10次请手动录入或明日再试")
return
}
}
type argsComapany struct {
Name string `json:"name" form:"name"`
RegNum string `json:"regNum" form:"regNum"`
}
type replyCompany struct {
CompanyId uint `json:"companyId"`
Name string `json:"name"`
RegNum string `json:"regNum"`
LegalPersonName string `json:"legalPersonName"`
IsCreditCode int `json:"isCreditCode"`
TaxNumber string `json:"taxNumber"`
FormTime string `json:"formTime"`
ToTime string `json:"toTime"`
Address string `json:"address"`
Bank string `json:"bank"`
Bankaccount string `json:"bankaccount"`
Tel string `json:"tel"`
}
// @Style 企业信息获取
func (e *Enterprise) Company(c *gin.Context) {
userId, err := e.GetGysIdByWs(c)
if err != nil {
back.Fail(c, err.Error())
return
}
args := argsComapany{}
if err := tools.Params(&args, c); err != nil {
back.Fail(c, err.Error())
return
}
if args.Name == "" {
back.Fail(c, "参数错误")
return
}
// 本地数据查询
companyBase := gys.GysCompanyBase{}
dbc.DB.First(&companyBase, "name = ?", args.Name)
if companyBase.Id > 0 {
creditcode := gys.GysCompanyCreditcode{}
if companyBase.IsCreditCode == 1 {
dbc.DB.First(&creditcode, "company_id = ?", companyBase.Id)
}
back.Suc(c, "操作成功", replyCompany{
CompanyId: companyBase.Id,
Name: companyBase.Name,
RegNum: companyBase.CreditCode,
LegalPersonName: companyBase.LegalPersonName,
IsCreditCode: companyBase.IsCreditCode,
TaxNumber: companyBase.TaxNumber,
FormTime: companyBase.GetBusinessStart(),
ToTime: companyBase.GetBusinessEnd(),
Address: creditcode.Address,
Bank: creditcode.Bank,
Bankaccount: creditcode.Bankaccount,
})
return
} else {
// 频率检测
date := time.Now().Format("20060102")
i, _ := dbc.Rds.Get(fmt.Sprintf("tianyan:company:%v:user:%v", date, userId)).Int()
if i >= 10 {
back.Fail(c, "操作次数过多,请明天重试")
return
}
dbc.Rds.Set(fmt.Sprintf("tianyan:company:%v:user:%v", date, userId), i+1, time.Hour*24)
// 工商信息获取
info, err := tianyan.Company.BaseInfo(args.Name)
if err != nil {
back.Fail(c, "网络异常")
return
}
if info.ID > 0 {
// 获取到工商信息,调用接口获取开票信息
creditCode, _ := juhe.Juhe.CreditCode(info.RegNumber)
isCreditCode := 0
if creditCode.Name != "" {
isCreditCode = 1
}
// 写入数据
data := gys.GysCompanyBase{
StaffNumRange: info.StaffNumRange,
FromTime: info.FromTime,
Type: info.Type,
BondName: info.BondName,
TianyanId: info.ID,
IsMicroEnt: info.IsMicroEnt,
UsedBondName: info.UsedBondName,
RegNumber: info.RegNumber,
PercentileScore: info.PercentileScore,
RegCapital: info.RegCapital,
Name: info.Name,
RegInstitute: info.RegInstitute,
RegLocation: info.RegLocation,
Industry: info.Industry,
ApprovedTime: info.ApprovedTime,
SocialStaffNum: info.SocialStaffNum,
Tags: info.Tags,
TaxNumber: info.TaxNumber,
BusinessScope: info.BusinessScope,
Property3: info.Property3,
Alias: info.Alias,
OrgNumber: info.OrgNumber,
RegStatus: info.RegStatus,
EstiblishTime: info.EstiblishTime,
BondType: info.BondType,
LegalPersonName: info.LegalPersonName,
ToTime: info.ToTime,
ActualCapital: info.ActualCapital,
CompanyOrgType: info.CompanyOrgType,
Base: info.Base,
CreditCode: info.CreditCode,
HistoryNames: info.HistoryNames,
BondNum: info.BondNum,
RevokeDate: info.RevokeDate,
RevokeReason: info.RevokeReason,
CancelDate: info.CancelDate,
CancelReason: info.CancelReason,
Category: info.Category,
CategoryBig: info.CategoryBig,
CategoryMiddle: info.CategoryMiddle,
IsCreditCode: isCreditCode,
}
dbc.DB.Create(&data)
if data.Id > 0 {
dbc.DB.Create(&gys.GysCompanyCreditcode{
CompanyId: data.Id,
Name: creditCode.Name,
Creditcode: creditCode.Creditcode,
Econkind: creditCode.Econkind,
Status: creditCode.Status,
Address: creditCode.Address,
Tel: creditCode.Tel,
Bank: creditCode.Bank,
Bankaccount: creditCode.Bankaccount,
Orderid: creditCode.Orderid,
})
}
back.Suc(c, "操作成功", replyCompany{
CompanyId: data.Id,
Name: data.Name,
RegNum: data.CreditCode,
LegalPersonName: data.LegalPersonName,
IsCreditCode: isCreditCode,
TaxNumber: data.TaxNumber,
FormTime: data.GetBusinessStart(),
ToTime: data.GetBusinessEnd(),
Address: creditCode.Address,
Bank: creditCode.Bank,
Bankaccount: creditCode.Bankaccount,
Tel: creditCode.Tel,
})
return
} else {
back.Fail(c, "未查询到相关企业信息,请确认公司名称是否准确")
return
}
}
}
// @Style 来源-运用商
func (e *Enterprise) Source(c *gin.Context) {
gysSources := []gys.GysSource{}
dbc.DB.Order("order").Find(&gysSources, "is_show = 1")
back.Suc(c, "操作成功", gysSources)
}
type argsSubmit struct {
CompanyId uint `json:"companyId" form:"companyId"`
LicenseUrl string `json:"licenseUrl" form:"licenseUrl"`
LegalPersonUrl string `json:"legalPersonUrl" form:"legalPersonUrl"`
PaytaxesUrl string `json:"paytaxesUrl" form:"paytaxesUrl"`
AccountUrl string `json:"accountUrl" form:"accountUrl"`
BankName string `json:"bankName" form:"bankName"` // 开户行
BankCode string `json:"bankCode" form:"bankCode"` // 银行账户
Address string `json:"address" form:"address"` // 地址
OperationAddress string `json:"operationAddress" form:"operationAddress"` // 经营地址
PayTaxes int `json:"payTaxes" form:"payTaxes"`
logic.Sector // 业务联系人
SourceId uint `json:"sourceId" form:"sourceId"`
Tel string `json:"tel" form:"tel"`
}
// @Style 提交数据
func (e *Enterprise) Submit(c *gin.Context) {
userId, err := e.GetGysIdByWs(c)
if err != nil {
back.Fail(c, err.Error())
return
}
args := argsSubmit{}
err = tools.Params(&args, c)
if err != nil {
back.Fail(c, err.Error())
return
}
if err := logic.SectorLogic.VerfiySector(args.Sector); err != nil {
back.Fail(c, err.Error())
return
}
gysState := vend.GysEnterpriseState{}
dbc.DB.First(&gysState, "user_id = ?", userId)
if gysState.ID > 0 {
if gysState.State == "1" {
back.Fail(c, "资料申请审核中")
return
}
if gysState.State == "2" {
back.Fail(c, "已审核通过")
return
}
}
companyBase := gys.GysCompanyBase{}
dbc.DB.First(&companyBase, "id = ?", args.CompanyId)
if companyBase.Id <= 0 {
back.Fail(c, "资料错误")
return
}
//if companyBase.IsCreditCode == 1 {
// creditcode := gys.GysCompanyCreditcode{}
// dbc.DB.First(&creditcode, "company_id = ?", companyBase.Id)
//args.BankCode = creditcode.Bankaccount
//args.BankName = creditcode.Bank
//args.Address = creditcode.Address
//}
// 合同编号
contractNo, err := logic.EnterpriseLogic.GetContractNo()
if err != nil {
back.Fail(c, err.Error())
return
}
contractTmp := vend.GysEnterpriseState{}
dbc.DB.First(&contractTmp, "contract_no = ?", contractNo)
if contractTmp.ID > 0 {
if contractTmp.ID != gysState.ID {
back.Fail(c, "合同编号获取失败")
return
}
}
gysSource := gys.GysSource{}
dbc.DB.First(&gysSource, "id = ?", args.SourceId)
if gysSource.Id <= 0 {
back.Fail(c, "运营方选择错误")
return
}
// 生成预览合同
if err := logic.EnterpriseLogic.ContractInit(contractNo, companyBase.Name, companyBase.TaxNumber, args.OperationAddress, args.BankName, args.BankCode, gysSource); err != nil {
back.Fail(c, err.Error())
return
}
if err = dbc.DB.Transaction(func(tx *gorm.DB) error {
gysEnterpriseState := vend.GysEnterpriseState{
EnterpriseName: companyBase.Name,
Recommended: "0",
RegistrationAddress: 1,
Trade: 1,
CompanyType: companyBase.GetCompanyType(),
CompanyTypeInfo: companyBase.GetCompanyInfo(),
Capital: decimal.NewFromFloat(companyBase.GetRegCapital()).String(),
Currency: companyBase.GetCurrency(),
BusinessStart: companyBase.GetBusinessStart(),
BusinessEnd: companyBase.GetBusinessEnd(),
RegistrationDetailAddress: companyBase.RegLocation,
EnterpriseCode: companyBase.CreditCode,
LicenseUrl: args.LicenseUrl,
PayTaxes: args.PayTaxes,
PaytaxesUrl: args.PaytaxesUrl,
AccountUrl: args.AccountUrl,
LegalPerson: companyBase.LegalPersonName,
LegalPersonUrl: args.LegalPersonUrl,
ComitTime: formatime.NewSecondNow(),
State: "1",
UserID: strconv.FormatUint(uint64(userId), 10),
CompanyId: args.CompanyId,
Source: args.SourceId,
TaxNumber: companyBase.TaxNumber,
BankName: args.BankName,
BankCode: args.BankCode,
Address: args.Address,
ContractNo: contractNo,
OperationAddress: args.OperationAddress,
Tel: args.Tel,
}
if gysState.ID > 0 {
gysEnterpriseState.ID = gysState.ID
logic.EnterpriseLogic.Updates(gysEnterpriseState.ID, &gysEnterpriseState, tx)
} else {
logic.EnterpriseLogic.Create(&gysEnterpriseState, tx)
}
if gysEnterpriseState.ID <= 0 {
return errors.New("网络异常")
}
if gysState.ID > 0 {
logic.SectorLogic.Delete(gysEnterpriseState.ID, tx)
}
// 业务联系人
sales := vend.GysEnterpriseSector{
Name: args.Sector.Name,
Phone: args.Sector.Phone,
Email: args.Sector.Email,
Position: args.Sector.Position,
EnterpriseID: gysEnterpriseState.ID,
Type: vend.Sector_Type_Sales,
}
logic.SectorLogic.Create(&sales, tx)
if sales.ID <= 0 {
return errors.New("网络异常")
}
return nil
}); err != nil {
back.Fail(c, err.Error())
return
}
back.Suc(c, "资料提交成功", nil)
return
}
func (e *Enterprise) Create(c *gin.Context) {
userId, err := e.GetGysId(c)
if err != nil {
back.Fail(c, err.Error())
return
}
args := logic.EnterpriseInfo{}
err = tools.Params(&args, c)
if err != nil {
back.Fail(c, err.Error())
return
}
if err := logic.EnterpriseLogic.Verfiy(&args); err != nil {
back.Fail(c, err.Error())
return
}
gysEnterpriseState := vend.GysEnterpriseState{}
dbc.DB.First(&gysEnterpriseState, "user_id = ?", userId)
if gysEnterpriseState.ID > 0 {
back.Fail(c, "资料已提交")
return
}
if err = dbc.DB.Transaction(func(tx *gorm.DB) error {
gysEnterpriseState := vend.GysEnterpriseState{
EnterpriseName: args.EnterpriseName,
RegistrationAddress: args.RegistrationAddress,
Trade: args.Trade,
Recommended: "0",
CompanyType: args.CompanyType,
CompanyTypeInfo: args.CompanyTypeInfo,
Capital: args.CapitalDecimal.String(),
Currency: args.Currency,
BusinessStart: args.BusinessStartTime.Format("2006-01-02"),
BusinessEnd: args.BusinessEndTime.Format("2006-01-02"),
RegistrationProvince: args.RegistrationProvince,
RegistrationCity: args.RegistrationCity,
RegistrationDistrict: args.RegistrationDistrict,
RegistrationDetailAddress: args.RegistrationDetailAddress,
OperationProvince: args.OperationProvince,
OperationCity: args.OperationCity,
OperationDistrict: args.OperationDistrict,
OperationAddress: args.OperationAddress,
EnterpriseCode: args.EnterpriseCode,
LicenseUrl: args.LicenseUrl,
PayTaxes: args.PayTaxes,
PaytaxesUrl: args.PaytaxesUrl,
AccountUrl: args.AccountUrl,
LegalPerson: args.LegalPerson,
LegalPersonCode: args.LegalPersonCode,
LegalPersonUrl: args.LegalPersonUrl,
OverseasRegistration: args.OverseasRegistration,
OverseasOperation: args.OverseasOperation,
OverseasOperationInfo: args.OverseasOperationInfo,
OverseasCode: args.OverseasCode,
OverseasCodeUrl: args.OverseasCodeUrl,
OverseasAccountUrl: args.OverseasAccountUrl,
OverseasLegalPerson: args.OverseasLegalPerson,
OverseasLegalPersonUrl: args.OverseasLegalPersonUrl,
ComitTime: formatime.NewSecondNow(),
State: "1",
UserID: strconv.FormatUint(uint64(userId), 10),
}
logic.EnterpriseLogic.Create(&gysEnterpriseState, tx)
if gysEnterpriseState.ID <= 0 {
return errors.New("网络异常")
}
// 业务联系人
sales := vend.GysEnterpriseSector{
Name: args.Sales.Name,
Phone: args.Sales.Phone,
Email: args.Sales.Email,
EnterpriseID: gysEnterpriseState.ID,
Type: vend.Sector_Type_Sales,
}
logic.SectorLogic.Create(&sales, tx)
if sales.ID <= 0 {
return errors.New("网络异常")
}
// 售后联系人
afterSales := vend.GysEnterpriseSector{
Name: args.AfterSales.Name,
Phone: args.AfterSales.Phone,
Email: args.AfterSales.Email,
EnterpriseID: gysEnterpriseState.ID,
Type: vend.Sector_Type_AfterSales,
}
logic.SectorLogic.Create(&afterSales, tx)
if sales.ID <= 0 {
return errors.New("网络异常")
}
// 对账联系人
account := vend.GysEnterpriseSector{
Name: args.Account.Name,
Phone: args.Account.Phone,
Email: args.Account.Email,
EnterpriseID: gysEnterpriseState.ID,
Type: vend.Sector_Type_Account,
}
logic.SectorLogic.Create(&account, tx)
if sales.ID <= 0 {
return errors.New("网络异常")
}
if err := logic.BrandLogic.HandBrand(0, userId, args.Brand, gysEnterpriseState.ID, "1", tx); err != nil {
return err
}
return nil
}); err != nil {
back.Fail(c, err.Error())
return
}
back.Suc(c, "资料提交成功", nil)
return
}
// @Style 重新提交
func (e *Enterprise) Update(c *gin.Context) {
userId, err := e.GetGysId(c)
if err != nil {
back.Fail(c, err.Error())
return
}
args := logic.EnterpriseInfo{}
err = tools.Params(&args, c)
if err != nil {
back.Fail(c, err.Error())
return
}
if err := logic.EnterpriseLogic.Verfiy(&args); err != nil {
back.Fail(c, err.Error())
return
}
gysEnterpriseState := vend.GysEnterpriseState{}
dbc.DB.First(&gysEnterpriseState, "user_id = ?", userId)
if gysEnterpriseState.ID <= 0 {
back.Fail(c, "资料未提交")
return
}
if gysEnterpriseState.State == "3" {
back.Fail(c, "资料已审核通过")
return
}
gysEnterpriseStateId := gysEnterpriseState.ID
if err := dbc.DB.Transaction(func(tx *gorm.DB) error {
gysEnterpriseState = vend.GysEnterpriseState{
EnterpriseName: args.EnterpriseName,
RegistrationAddress: args.RegistrationAddress,
Trade: args.Trade,
CompanyType: args.CompanyType,
CompanyTypeInfo: args.CompanyTypeInfo,
Capital: args.CapitalDecimal.String(),
Currency: args.Currency,
BusinessStart: args.BusinessStartTime.Format("2006-01-02"),
BusinessEnd: args.BusinessEndTime.Format("2006-01-02"),
RegistrationProvince: args.RegistrationProvince,
RegistrationCity: args.RegistrationCity,
RegistrationDistrict: args.RegistrationDistrict,
RegistrationDetailAddress: args.RegistrationDetailAddress,
OperationProvince: args.OperationProvince,
OperationCity: args.OperationCity,
OperationDistrict: args.OperationDistrict,
OperationAddress: args.OperationAddress,
EnterpriseCode: args.EnterpriseCode,
LicenseUrl: args.LicenseUrl,
PayTaxes: args.PayTaxes,
PaytaxesUrl: args.PaytaxesUrl,
AccountUrl: args.AccountUrl,
LegalPerson: args.LegalPerson,
LegalPersonCode: args.LegalPersonCode,
LegalPersonUrl: args.LegalPersonUrl,
OverseasRegistration: args.OverseasRegistration,
OverseasOperation: args.OverseasOperation,
OverseasOperationInfo: args.OverseasOperationInfo,
OverseasCode: args.OverseasCode,
OverseasCodeUrl: args.OverseasCodeUrl,
OverseasAccountUrl: args.OverseasAccountUrl,
OverseasLegalPerson: args.OverseasLegalPerson,
OverseasLegalPersonUrl: args.OverseasLegalPersonUrl,
ComitTime: formatime.NewSecondNow(),
State: "1",
UserID: strconv.FormatUint(uint64(userId), 10),
}
row := logic.EnterpriseLogic.Updates(gysEnterpriseStateId, &gysEnterpriseState, tx)
if row <= 0 {
return errors.New("网络异常")
}
// 删除联系人
row = logic.SectorLogic.Delete(gysEnterpriseStateId, tx)
if row <= 0 {
return errors.New("网络异常")
}
// 业务联系人
sales := vend.GysEnterpriseSector{
Name: args.Sales.Name,
Phone: args.Sales.Phone,
Email: args.Sales.Email,
EnterpriseID: gysEnterpriseState.ID,
Type: vend.Sector_Type_Sales,
}
logic.SectorLogic.Create(&sales, tx)
if sales.ID <= 0 {
back.Fail(c, "网络异常")
}
// 售后联系人
afterSales := vend.GysEnterpriseSector{
Name: args.AfterSales.Name,
Phone: args.AfterSales.Phone,
Email: args.AfterSales.Email,
EnterpriseID: gysEnterpriseState.ID,
Type: vend.Sector_Type_AfterSales,
}
logic.SectorLogic.Create(&afterSales, tx)
if sales.ID <= 0 {
back.Fail(c, "网络异常")
}
// 对账联系人
account := vend.GysEnterpriseSector{
Name: args.Account.Name,
Phone: args.Account.Phone,
Email: args.Account.Email,
EnterpriseID: gysEnterpriseState.ID,
Type: vend.Sector_Type_Account,
}
logic.SectorLogic.Create(&account, tx)
if sales.ID <= 0 {
back.Fail(c, "网络异常")
}
if err := logic.BrandLogic.HandBrand(0, userId, args.Brand, gysEnterpriseState.ID, "1", dbc.DB); err != nil {
return err
}
return nil
}); err != nil {
back.Fail(c, err.Error())
return
}
back.Suc(c, "资料提交成功", nil)
return
}
// @Style 合同预览
func (e *Enterprise) Contract(c *gin.Context) {
userId, err := e.GetGysIdByWs(c)
if err != nil {
back.Fail(c, err.Error())
return
}
// 获取合同模版
gysState := vend.GysEnterpriseState{}
dbc.DB.First(&gysState, "user_id = ?", userId)
if gysState.ID <= 0 {
back.Fail(c, "请求失败")
return
}
back.Suc(c, "操作成功", gin.H{
"contracts": []string{
"/photo/contract/" + tools.MD5(gysState.ContractNo+"-contract-01.jpg") + ".jpg",
"/photo/contract/contract-02.jpg",
"/photo/contract/" + tools.MD5(gysState.ContractNo+"-contract-03.jpg") + ".jpg",
"/photo/contract/" + tools.MD5(gysState.ContractNo+"-contract-04.jpg") + ".jpg",
"/photo/contract/" + tools.MD5(gysState.ContractNo+"-contract-05.jpg") + ".jpg",
"/photo/contract/contract-06.jpg",
"/photo/contract/contract-07.jpg",
"/photo/contract/contract-08.jpg",
"/photo/contract/contract-09.jpg",
"/photo/contract/contract-10.jpg",
"/photo/contract/contract-11.jpg",
"/photo/contract/contract-12.jpg",
"/photo/contract/contract-13.jpg",
},
})
return
}
type argsEmail struct {
Email string `json:"email"`
}
// @Style 发送邮件
func (e *Enterprise) Email(c *gin.Context) {
userId, err := e.GetGysIdByWs(c)
if err != nil {
back.Fail(c, err.Error())
return
}
args := argsEmail{}
if err := tools.Params(&args, c); err != nil {
back.Fail(c, err.Error())
return
}
if !tools.VerifyEmail(args.Email) {
back.Fail(c, "联系人邮箱格式错误")
return
}
// 记录邮件信息
email := gys.GysEmail{
Email: args.Email,
RelationId: userId,
Type: gys.Mail_Type_Gys_Settled,
}
dbc.DB.Create(&email)
if email.Id > 0 {
// 加入队列
dbc.Rds.RPush(configs.Config_Gys_Email_list_redis_key, email.Id)
} else {
back.Fail(c, "网络异常")
return
}
back.Suc(c, "操作成功", nil)
return
}
type argsEnterpriseInfo struct {
EnterpriseId uint `json:"enterpriseId" form:"enterpriseId"`
}
type replyEnterpriseInfo struct {
EnterpriseName string `json:"enterpriseName"`
BusinessEnd string `json:"businessEnd"`
BusinessStart string `json:"businessStart"`
PayTaxes int `json:"payTaxes"`
BankName string `json:"bankName"`
BankCode string `json:"bankCode"`
LicenseUrl string `json:"licenseUrl"`
PaytaxesUrl string `json:"paytaxesUrl"`
AccountUrl string `json:"accountUrl"`
LegalPersonUrl string `json:"legalPersonUrl"`
LegalPerson string `json:"legalPerson"`
Name string `json:"name"`
Position string `json:"position"`
Email string `json:"email"`
Phone string `json:"phone"`
Source uint `json:"source"`
RegistrationDetailAddress string `json:"registrationDetailAddress"`
SourceName string `json:"sourceName"`
TelPhone string `json:"telPhone"`
TaxNumber string `json:"taxNumber"`
StateInfo string `json:"stateInfo"`
ContractStart formatime.Date `json:"contractStart"`
ContractEnd formatime.Date `json:"contractEnd"`
Deposit decimal.Decimal `json:"deposit"`
Period int `json:"period"`
ContractNo string `json:"contractNo"`
}
// @Style 详情
func (e *Enterprise) Info(c *gin.Context) {
args := argsEnterpriseInfo{}
if err := tools.Params(&args, c); err != nil {
back.Fail(c, err.Error())
return
}
if args.EnterpriseId <= 0 {
back.Fail(c, "参数错误")
return
}
enterpriseState := vend.GysEnterpriseState{}
dbc.DB.First(&enterpriseState, "id = ?", args.EnterpriseId)
if enterpriseState.ID <= 0 {
back.Fail(c, "参数错误")
return
}
enterpriseSector := vend.GysEnterpriseSector{}
dbc.DB.First(&enterpriseSector, "enterprise_id = ? and `type` = ?", enterpriseState.ID, vend.Sector_Type_Sales)
source := gys.GysSource{}
dbc.DB.Model(&gys.GysSource{}).First(&source, "id = ?", enterpriseState.Source)
gysUser := vend.GysUsers{}
dbc.DB.First(&gysUser, "id = ?", enterpriseState.UserID)
back.Suc(c, "操作成功", replyEnterpriseInfo{
EnterpriseName: enterpriseState.EnterpriseName,
TaxNumber: enterpriseState.TaxNumber,
BusinessStart: enterpriseState.BusinessStart,
BusinessEnd: enterpriseState.BusinessEnd,
PayTaxes: enterpriseState.PayTaxes,
BankName: enterpriseState.BankName,
BankCode: enterpriseState.BankCode,
LicenseUrl: enterpriseState.LicenseUrl,
PaytaxesUrl: enterpriseState.PaytaxesUrl,
AccountUrl: enterpriseState.AccountUrl,
LegalPerson: enterpriseState.LegalPerson,
LegalPersonUrl: enterpriseState.LegalPersonUrl,
Name: enterpriseSector.Name,
Phone: enterpriseSector.Phone,
Email: enterpriseSector.Email,
Position: enterpriseSector.Position,
Source: enterpriseState.Source,
RegistrationDetailAddress: enterpriseState.RegistrationDetailAddress,
SourceName: source.Name,
TelPhone: gysUser.Username,
StateInfo: enterpriseState.StateInfo,
ContractStart: formatime.NewDateFrom(enterpriseState.ContractStart.Time),
ContractEnd: formatime.NewDateFrom(enterpriseState.ContractEnd.Time),
Deposit: enterpriseState.Deposit,
Period: enterpriseState.Period,
ContractNo: enterpriseState.ContractNo,
})
}
type argsList struct {
EnterpriseName string `json:"enterpriseName" form:"enterpriseName"`
ContractNo string `json:"contractNo" form:"contractNo"`
Source uint `json:"source" form:"source"`
ComitTimeStart string `json:"comitTimeStart" form:"comitTimeStart"`
ComitTimeEnd string `json:"comitTimeEnd" form:"comitTimeEnd"`
AdminDateStart string `json:"adminDateStart" form:"adminDateStart"`
AdminDateEnd string `json:"adminDateEnd" form:"adminDateEnd"`
bean.Page
}
type replyLists struct {
EnterpriseId uint `json:"enterpriseId"`
EnterpriseName string `json:"enterpriseName"`
ContractNo string `json:"contractNo"`
Source uint `json:"source"`
ComitTime formatime.Second `json:"comitTime"`
AdminDate formatime.Second `json:"adminDate"`
StateInfo string `json:"stateInfo"`
SourceName string `json:"sourceName"`
State string `json:"state"`
}
// @Style 待审核列表
func (e *Enterprise) ListsAuditing(c *gin.Context) {
args := argsList{}
if err := tools.Params(&args, c); err != nil {
back.Fail(c, err.Error())
return
}
total, lists := logic.EnterpriseLogic.Lists(1, args.EnterpriseName, args.ContractNo, args.Source, args.ComitTimeStart, args.ComitTimeEnd, args.AdminDateStart, args.AdminDateEnd, args.Page)
resultList := []replyLists{}
if len(lists) > 0 {
sourceIds := []uint{}
for _, state := range lists {
sourceIds = append(sourceIds, state.Source)
}
sourceLists := []gys.GysSource{}
dbc.DB.Model(&gys.GysSource{}).Find(&sourceLists, "id in (?)", sourceIds)
sorceMap := map[uint]gys.GysSource{}
for _, list := range sourceLists {
sorceMap[list.Id] = list
}
for _, state := range lists {
resultList = append(resultList, replyLists{
EnterpriseId: state.ID,
EnterpriseName: state.EnterpriseName,
ContractNo: state.ContractNo,
Source: state.Source,
ComitTime: state.ComitTime,
AdminDate: state.AdminDate,
State: state.State,
StateInfo: state.StateInfo,
SourceName: sorceMap[state.Source].Name,
})
}
}
back.Suc(c, "操作成功", bean.ResultLists{
List: resultList,
Total: total,
})
}
// @Style 通过列表
func (e *Enterprise) ListsAgree(c *gin.Context) {
args := argsList{}
if err := tools.Params(&args, c); err != nil {
back.Fail(c, err.Error())
return
}
total, lists := logic.EnterpriseLogic.Lists(2, args.EnterpriseName, args.ContractNo, args.Source, args.ComitTimeStart, args.ComitTimeEnd, args.AdminDateStart, args.AdminDateEnd, args.Page)
resultList := []replyLists{}
if len(lists) > 0 {
sourceIds := []uint{}
for _, state := range lists {
sourceIds = append(sourceIds, state.Source)
}
sourceLists := []gys.GysSource{}
dbc.DB.Model(&gys.GysSource{}).Find(&sourceLists, "id in (?)", sourceIds)
sorceMap := map[uint]gys.GysSource{}
for _, list := range sourceLists {
sorceMap[list.Id] = list
}
for _, state := range lists {
resultList = append(resultList, replyLists{
EnterpriseId: state.ID,
EnterpriseName: state.EnterpriseName,
ContractNo: state.ContractNo,
Source: state.Source,
ComitTime: state.ComitTime,
AdminDate: state.AdminDate,
State: state.State,
StateInfo: state.StateInfo,
SourceName: sorceMap[state.Source].Name,
})
}
}
back.Suc(c, "操作成功", bean.ResultLists{
List: resultList,
Total: total,
})
}
// @Style 驳回列表
func (e *Enterprise) ListsReject(c *gin.Context) {
args := argsList{}
if err := tools.Params(&args, c); err != nil {
back.Fail(c, err.Error())
return
}
total, lists := logic.EnterpriseLogic.Lists(3, args.EnterpriseName, args.ContractNo, args.Source, args.ComitTimeStart, args.ComitTimeEnd, args.AdminDateStart, args.AdminDateEnd, args.Page)
resultList := []replyLists{}
if len(lists) > 0 {
sourceIds := []uint{}
for _, state := range lists {
sourceIds = append(sourceIds, state.Source)
}
sourceLists := []gys.GysSource{}
dbc.DB.Model(&gys.GysSource{}).Find(&sourceLists, "id in (?)", sourceIds)
sorceMap := map[uint]gys.GysSource{}
for _, list := range sourceLists {
sorceMap[list.Id] = list
}
for _, state := range lists {
resultList = append(resultList, replyLists{
EnterpriseId: state.ID,
EnterpriseName: state.EnterpriseName,
ContractNo: state.ContractNo,
Source: state.Source,
ComitTime: state.ComitTime,
AdminDate: state.AdminDate,
State: state.State,
StateInfo: state.StateInfo,
SourceName: sorceMap[state.Source].Name,
})
}
}
back.Suc(c, "操作成功", bean.ResultLists{
List: resultList,
Total: total,
})
}
// @Style 审核通过
func (e *Enterprise) Yes(c *gin.Context) {
args := logic.ArgsYes{}
if err := tools.Params(&args, c); err != nil {
back.Fail(c, err.Error())
return
}
if err := logic.EnterpriseLogic.Verified(&args); err != nil {
back.Fail(c, err.Error())
return
}
var user manage.UserInfo
user.ID, _ = e.GetManageId(c)
if err := dbc.DB.Find(&user).Error; err != nil {
back.Fail(c, "数据错误:"+err.Error())
return
}
state := vend.GysEnterpriseState{}
dbc.DB.First(&state, "id = ?", args.EnterpriseId)
if state.ID <= 0 {
back.Fail(c, "参数错误")
return
}
if state.State != "1" {
back.Fail(c, "已审核")
return
}
dbc.DB.Model(&vend.GysEnterpriseState{}).Where("id = ?", args.EnterpriseId).Update(&vend.GysEnterpriseState{
PayTaxes: args.PayTaxes,
ContractStart: args.ContractStartTime,
ContractEnd: args.ContraceEndTime,
Deposit: decimal.NewFromFloat(args.Deposit),
Period: args.Period,
PaytaxesUrl: args.PaytaxesUrl,
State: "2",
AdminUser: user.Name,
AdminID: user.ID,
AdminDate: formatime.NewSecondNow(),
})
back.Suc(c, "操作成功", nil)
}
type argsEnterpriseNo struct {
EnterpriseId uint `json:"enterpriseId" form:"enterpriseId"`
StateInfo string `json:"stateInfo" form:"stateInfo"`
}
// @Style 审核通过
func (e *Enterprise) No(c *gin.Context) {
args := argsEnterpriseNo{}
if err := tools.Params(&args, c); err != nil {
back.Fail(c, err.Error())
return
}
if args.EnterpriseId <= 0 || args.StateInfo == "" {
back.Fail(c, "参数错误")
return
}
var user manage.UserInfo
user.ID, _ = e.GetManageId(c)
if err := dbc.DB.Find(&user).Error; err != nil {
back.Fail(c, "数据错误:"+err.Error())
return
}
state := vend.GysEnterpriseState{}
dbc.DB.First(&state, "id = ?", args.EnterpriseId)
if state.ID <= 0 {
back.Fail(c, "参数错误")
return
}
if state.State != "1" {
back.Fail(c, "已审核")
return
}
dbc.DB.Model(&vend.GysEnterpriseState{}).Where("id = ?", args.EnterpriseId).Update(&vend.GysEnterpriseState{
StateInfo: args.StateInfo,
State: "3",
AdminUser: user.Name,
AdminID: user.ID,
AdminDate: formatime.NewSecondNow(),
})
back.Suc(c, "操作成功", nil)
}