2023-10-13 09:20:44 +00:00
|
|
|
|
package basic
|
|
|
|
|
|
|
|
|
|
import (
|
2024-06-14 07:15:39 +00:00
|
|
|
|
"encoding/json"
|
2023-10-13 09:20:44 +00:00
|
|
|
|
"errors"
|
2023-10-18 07:49:35 +00:00
|
|
|
|
"fmt"
|
2023-10-13 09:20:44 +00:00
|
|
|
|
"github.com/gin-gonic/gin"
|
2023-10-16 08:46:20 +00:00
|
|
|
|
"go-admin/app/admin/middleware"
|
2023-10-13 09:20:44 +00:00
|
|
|
|
"go-admin/app/admin/models"
|
|
|
|
|
orm "go-admin/common/global"
|
|
|
|
|
"go-admin/logger"
|
2023-10-16 08:46:20 +00:00
|
|
|
|
"go-admin/tools"
|
2023-10-13 09:20:44 +00:00
|
|
|
|
"go-admin/tools/app"
|
|
|
|
|
"net/http"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type SupplierCreateRequest struct {
|
2024-06-14 07:15:39 +00:00
|
|
|
|
Name string `json:"name" validate:"required"` // 供应商名称
|
|
|
|
|
Contact string `json:"contact"` // 联系人
|
|
|
|
|
Tel string `json:"tel"` // 手机号
|
|
|
|
|
Address string `json:"address"` // 地址
|
|
|
|
|
OpeningBank string `json:"opening_bank"` // 开户行
|
|
|
|
|
AccountHolder string `json:"account_holder"` // 开户人
|
|
|
|
|
BankAccount string `json:"bank_account"` // 银行卡号
|
|
|
|
|
PaymentCycle uint32 `json:"payment_cycle" ` // 支付周期
|
|
|
|
|
TaxNumber string `json:"tax_number"` // 税点
|
|
|
|
|
Landline string `json:"landline"` // 固话
|
|
|
|
|
Email string `json:"email"` // 邮箱
|
|
|
|
|
CompanyWebsite string `json:"company_website"` // 网站
|
|
|
|
|
Province string `json:"province"` // 省份
|
|
|
|
|
City string `json:"city"` // 城市
|
|
|
|
|
Area string `json:"area"` // 地区
|
|
|
|
|
BankList []models.SupplierBankInfo `json:"bank_list" validate:"required"` // 开户银行信息列表
|
2023-10-13 09:20:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SupplierCreate 添加供应商
|
2023-10-17 02:52:20 +00:00
|
|
|
|
// @Summary 创建供应商
|
2024-06-14 07:15:39 +00:00
|
|
|
|
// @Tags 供应商管理,V1.4.1
|
2023-10-17 02:52:20 +00:00
|
|
|
|
// @Produce json
|
|
|
|
|
// @Accept json
|
|
|
|
|
// @Param request body SupplierCreateRequest true "供应商模型"
|
|
|
|
|
// @Success 200 {object} models.Supplier
|
|
|
|
|
// @Router /api/v1/supplier/create [post]
|
2023-10-13 09:20:44 +00:00
|
|
|
|
func SupplierCreate(c *gin.Context) {
|
|
|
|
|
req := new(SupplierCreateRequest)
|
|
|
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
2023-10-18 07:49:35 +00:00
|
|
|
|
fmt.Println(err.Error())
|
2023-10-13 09:20:44 +00:00
|
|
|
|
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
|
|
|
|
|
return
|
|
|
|
|
}
|
2023-10-16 08:46:20 +00:00
|
|
|
|
|
|
|
|
|
err := tools.Validate(req)
|
|
|
|
|
if err != nil {
|
|
|
|
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-13 09:20:44 +00:00
|
|
|
|
supplier := &models.Supplier{
|
2023-10-16 08:46:20 +00:00
|
|
|
|
Name: req.Name,
|
|
|
|
|
Contact: req.Contact,
|
|
|
|
|
Tel: req.Tel,
|
|
|
|
|
Address: req.Address,
|
|
|
|
|
OpeningBank: req.OpeningBank,
|
|
|
|
|
BankAccount: req.BankAccount,
|
|
|
|
|
PaymentCycle: req.PaymentCycle,
|
|
|
|
|
TaxNumber: req.TaxNumber,
|
|
|
|
|
Landline: req.Landline,
|
|
|
|
|
Email: req.Email,
|
|
|
|
|
CompanyWebsite: req.CompanyWebsite,
|
|
|
|
|
Province: req.Province,
|
|
|
|
|
City: req.City,
|
|
|
|
|
Area: req.Area,
|
|
|
|
|
CooperativeBusinessId: middleware.GetCooperativeBusinessId(c),
|
2023-10-18 07:49:35 +00:00
|
|
|
|
AccountHolder: req.AccountHolder,
|
2023-10-13 09:20:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-06-14 07:15:39 +00:00
|
|
|
|
if len(req.BankList) != 0 {
|
|
|
|
|
// 将 BankList 转换为 JSON 字符串
|
|
|
|
|
bankDataJSON, err := json.Marshal(req.BankList)
|
|
|
|
|
if err != nil {
|
|
|
|
|
tools.HasError(err, "数据解析失败", 500)
|
|
|
|
|
}
|
|
|
|
|
supplier.BankData = string(bankDataJSON)
|
|
|
|
|
} else {
|
|
|
|
|
supplier.BankData = ""
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-16 08:46:20 +00:00
|
|
|
|
err = orm.Eloquent.Create(supplier).Error
|
2023-10-13 09:20:44 +00:00
|
|
|
|
if err != nil {
|
2023-10-14 08:19:04 +00:00
|
|
|
|
logger.Error("[SupplierCreate]:create supplier err", logger.Field("err", err))
|
2023-10-13 09:20:44 +00:00
|
|
|
|
app.Error(c, http.StatusInternalServerError, err, "操作失败")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
app.OK(c, supplier, "创建成功")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type SupplierUpdateRequest struct {
|
|
|
|
|
SupplierCreateRequest
|
2023-10-16 08:46:20 +00:00
|
|
|
|
Id uint32 `json:"id" validate:"required"`
|
2023-10-13 09:20:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SupplierUpdate 更新供应商
|
2023-10-17 02:52:20 +00:00
|
|
|
|
// @Summary 更新供应商
|
2024-06-14 07:15:39 +00:00
|
|
|
|
// @Tags 供应商管理,V1.4.1
|
2023-10-17 02:52:20 +00:00
|
|
|
|
// @Produce json
|
|
|
|
|
// @Accept json
|
|
|
|
|
// @Param request body SupplierUpdateRequest true "供应商模型"
|
|
|
|
|
// @Success 200 {object} app.Response
|
|
|
|
|
// @Router /api/v1/supplier/update [post]
|
2023-10-13 09:20:44 +00:00
|
|
|
|
func SupplierUpdate(c *gin.Context) {
|
|
|
|
|
req := new(SupplierUpdateRequest)
|
|
|
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
|
|
|
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
supplier := &models.Supplier{
|
|
|
|
|
Name: req.Name,
|
|
|
|
|
Contact: req.Contact,
|
|
|
|
|
Tel: req.Tel,
|
|
|
|
|
Address: req.Address,
|
|
|
|
|
OpeningBank: req.OpeningBank,
|
|
|
|
|
BankAccount: req.BankAccount,
|
|
|
|
|
PaymentCycle: req.PaymentCycle,
|
|
|
|
|
TaxNumber: req.TaxNumber,
|
|
|
|
|
Landline: req.Landline,
|
|
|
|
|
Email: req.Email,
|
|
|
|
|
CompanyWebsite: req.CompanyWebsite,
|
2023-10-18 07:49:35 +00:00
|
|
|
|
Province: req.Province,
|
|
|
|
|
City: req.City,
|
|
|
|
|
Area: req.Area,
|
|
|
|
|
AccountHolder: req.AccountHolder,
|
2023-10-13 09:20:44 +00:00
|
|
|
|
}
|
2024-06-14 07:15:39 +00:00
|
|
|
|
|
|
|
|
|
if len(req.BankList) != 0 {
|
|
|
|
|
// 将 BankList 转换为 JSON 字符串
|
|
|
|
|
bankDataJSON, err := json.Marshal(req.BankList)
|
|
|
|
|
if err != nil {
|
|
|
|
|
tools.HasError(err, "数据解析失败", 500)
|
|
|
|
|
}
|
|
|
|
|
supplier.BankData = string(bankDataJSON)
|
|
|
|
|
} else {
|
|
|
|
|
supplier.BankData = ""
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-13 09:20:44 +00:00
|
|
|
|
err := orm.Eloquent.Where("id", req.Id).Updates(supplier).Error
|
|
|
|
|
if err != nil {
|
2023-10-14 08:19:04 +00:00
|
|
|
|
logger.Error("update supplier err :", logger.Field("err", err), logger.Field("s", supplier))
|
2023-10-13 09:20:44 +00:00
|
|
|
|
app.Error(c, http.StatusInternalServerError, err, "更新失败")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
app.OK(c, nil, "更新成功")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type SupplierListRequest struct {
|
2023-10-18 02:06:16 +00:00
|
|
|
|
Number string `json:"number"` //供应商编号
|
|
|
|
|
Name string `json:"name"` //供应商名称
|
2023-10-13 09:20:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SupplierList 供应商列表
|
2023-10-17 02:52:20 +00:00
|
|
|
|
// @Summary 供应商列表
|
2024-06-14 07:15:39 +00:00
|
|
|
|
// @Tags 供应商管理,V1.4.1
|
2023-10-17 02:52:20 +00:00
|
|
|
|
// @Produce json
|
|
|
|
|
// @Accept json
|
|
|
|
|
// @Param request body SupplierListRequest true "供应商查询模型"
|
|
|
|
|
// @Success 200 {array} models.Supplier
|
|
|
|
|
// @Router /api/v1/supplier/list [post]
|
2023-10-13 09:20:44 +00:00
|
|
|
|
func SupplierList(c *gin.Context) {
|
|
|
|
|
req := new(SupplierListRequest)
|
|
|
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
|
|
|
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
list, err := models.GetSupplier(models.GetSupplierRequest{
|
2023-10-16 08:46:20 +00:00
|
|
|
|
Name: req.Name,
|
|
|
|
|
Number: req.Number,
|
|
|
|
|
CooperativeBusinessId: middleware.GetCooperativeBusinessId(c),
|
2023-10-13 09:20:44 +00:00
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
app.Error(c, http.StatusInternalServerError, err, "获取列表失败")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
app.OK(c, list, "")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SupplierDetail 供应商详情
|
2023-10-17 02:52:20 +00:00
|
|
|
|
// @Summary 供应商详情
|
2024-06-14 07:15:39 +00:00
|
|
|
|
// @Tags 供应商管理,V1.4.1
|
2023-10-17 02:52:20 +00:00
|
|
|
|
// @Produce json
|
|
|
|
|
// @Param id path int true "供应商id"
|
|
|
|
|
// @Success 200 {object} models.Supplier
|
|
|
|
|
// @Router /api/v1/supplier/detail/{id} [get]
|
2023-10-13 09:20:44 +00:00
|
|
|
|
func SupplierDetail(c *gin.Context) {
|
|
|
|
|
id := c.Param("id")
|
|
|
|
|
|
|
|
|
|
var supplier models.Supplier
|
|
|
|
|
err := orm.Eloquent.Table("erp_supplier").Where("id=?", id).Find(&supplier).Error
|
|
|
|
|
if err != nil {
|
2023-10-14 08:19:04 +00:00
|
|
|
|
logger.Error("get supplier detail failed", logger.Field("err", err), logger.Field("id", id))
|
2023-10-13 09:20:44 +00:00
|
|
|
|
app.Error(c, http.StatusInternalServerError, err, "供应商不存在")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-14 07:15:39 +00:00
|
|
|
|
if supplier.BankData != "" {
|
|
|
|
|
supplier.BankList = models.DeserializeBankData(supplier.BankData)
|
|
|
|
|
supplier.BankData = ""
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-16 08:46:20 +00:00
|
|
|
|
app.OK(c, supplier, "ok")
|
2023-10-13 09:20:44 +00:00
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SupplierDel 删除供应商
|
2023-10-17 02:52:20 +00:00
|
|
|
|
// @Summary 删除供应商
|
2024-06-14 07:15:39 +00:00
|
|
|
|
// @Tags 供应商管理,V1.4.1
|
2023-10-17 02:52:20 +00:00
|
|
|
|
// @Produce json
|
|
|
|
|
// @Param id path int true "供应商id"
|
|
|
|
|
// @Success 200 {object} app.Response
|
|
|
|
|
// @Router /api/v1/supplier/delete/{id} [delete]
|
2023-10-13 09:20:44 +00:00
|
|
|
|
func SupplierDel(c *gin.Context) {
|
|
|
|
|
id := c.Param("id")
|
|
|
|
|
|
|
|
|
|
err := orm.
|
|
|
|
|
Eloquent.Table("erp_supplier").
|
|
|
|
|
Delete(&models.Supplier{}, id).Error
|
|
|
|
|
if err != nil {
|
2023-10-14 08:19:04 +00:00
|
|
|
|
logger.Error("get supplier detail failed", logger.Field("err", err), logger.Field("id", id))
|
2023-10-13 09:20:44 +00:00
|
|
|
|
app.Error(c, http.StatusInternalServerError, err, "删除失败")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-16 08:46:20 +00:00
|
|
|
|
app.OK(c, nil, "删除成功")
|
2023-10-13 09:20:44 +00:00
|
|
|
|
return
|
|
|
|
|
}
|