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.

369 lines
11 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 vend
import (
"fmt"
"recook/internal/back"
"recook/internal/dbc"
"recook/internal/model/goods"
"recook/internal/model/manage"
"recook/internal/model/vend"
"recook/tools"
"strconv"
"strings"
"github.com/gin-gonic/gin"
)
type queryListParam struct {
Page int64 `json:"page" validate:"numeric"`
IsPage int64 `json:"isPage" validate:"numeric"`
Limit int64 `json:"limit" validator:"required"`
VendName string `json:"vendName"`
GysCode string `json:"gysCode"`
Status int `json:"status"`
StartDate string `json:"startDate"`
EndDate string `json:"endDate"`
}
type changeCode struct {
ID int `json:"id"`
Code string `json:"code"`
}
type gysUserState struct {
vend.GysUsers
StateId uint `json:"-"`
}
func QueryVendList(c *gin.Context) {
// 采购根据权限获取供应商
var userId = c.MustGet("Manager_ID").(uint)
var user manage.UserInfo
var enter []vend.GysEnterpriseBrand
var gysID []uint
user.ID = userId
if err := dbc.DB.Find(&user).Error; err != nil {
back.Fail(c, "数据错误:"+err.Error())
return
}
// 每页显示数据条数
var q queryListParam
err := tools.Params(&q, c)
//筛选条件
whereSelect := ""
whereValues := []interface{}{}
if user.NewroleId == 9 {
vendsIds := []string{}
categoryIDSArr := strings.Split(user.GoodsType, ",")
//根据Category名获取对应user_id
dbc.DB.Select("distinct user_id").Find(&enter, "category_id in (?)", categoryIDSArr)
// 无匹配记录时
if len(enter) == 0 {
if q.IsPage == 1 {
back.Suc(c, "", &BaseResponse{
List: []vend.GysUsers{},
Total: 0,
})
} else {
back.Suc(c, "", &[]vend.GysUsers{})
}
return
} else {
for _, item := range enter {
gysID = append(gysID, item.UserID)
}
whereSelect = " and gys_users.id in (?)"
whereValues = append(whereValues, gysID)
}
vendsIds = strings.Split(user.VendsList, ",")
if len(vendsIds) > 0 {
whereSelect = whereSelect + " and (is_interior = 0 or (is_interior = 1 and gys_users.id in (?)))"
whereValues = append(whereValues, vendsIds)
} else {
whereSelect = whereSelect + " and is_interior = 0"
}
}
if err != nil {
back.Fail(c, err.Error())
return
}
var list []gysUserState
count := 0
if len(q.VendName) > 0 {
whereSelect = whereSelect + " and gys_users.username like ?"
// 注fmt.sprintf 会把%% 转换为 %
whereValues = append(whereValues, fmt.Sprintf("%%%s%%", q.VendName))
}
if len(q.GysCode) > 0 {
whereSelect = whereSelect + " and gys_users.gys_code = ?"
whereValues = append(whereValues, q.GysCode)
}
if q.Status > 0 {
whereSelect = whereSelect + " and gys_enterprise_state.state = ?"
whereValues = append(whereValues, q.Status)
}
if q.IsPage == 1 {
if len(whereValues) > 0 {
dbc.DB.Table("gys_users").Select("gys_users.*,gys_enterprise_state.id as state_id").Joins("left join gys_enterprise_state on gys_users.id = gys_enterprise_state.user_id").
Where("gys_users.id != 2 and gys_users.main_id = 0").Where(whereSelect[4:], whereValues...).Limit(q.Limit).Offset(q.Page * q.Limit).Find(&list)
dbc.DB.Table("gys_users").Select("gys_users.*").Joins("left join gys_enterprise_state on gys_users.id = gys_enterprise_state.user_id").
Where("gys_users.id != 2 and gys_users.main_id = 0").Where(whereSelect[4:], whereValues...).Count(&count)
} else {
dbc.DB.Table("gys_users").Select("gys_users.*,gys_enterprise_state.id as state_id").Joins("left join gys_enterprise_state on gys_users.id = gys_enterprise_state.user_id").
Where("gys_users.id != 2 and gys_users.main_id = 0").Limit(q.Limit).Offset(q.Page * q.Limit).Find(&list)
dbc.DB.Table("gys_users").Select("gys_users.*").Joins("left join gys_enterprise_state on gys_users.id = gys_enterprise_state.user_id").
Where("gys_users.id != 2 and gys_users.main_id = 0").Count(&count)
}
} else {
if len(whereValues) > 0 {
dbc.DB.Table("gys_users").Select("gys_users.*,gys_enterprise_state.id as state_id").Joins("left join gys_enterprise_state on gys_users.id = gys_enterprise_state.user_id").
Where("gys_users.id != 2 and gys_users.main_id = 0 and gys_users.status = 0").Where(whereSelect[4:], whereValues...).Find(&list)
} else {
dbc.DB.Table("gys_users").Select("gys_users.*,gys_enterprise_state.id as state_id").Joins("left join gys_enterprise_state on gys_users.id = gys_enterprise_state.user_id").
Where("gys_users.id != 2 and gys_users.main_id = 0 and gys_users.status = 0").Find(&list)
}
}
stateIds := []uint{}
for _, state := range list {
stateIds = append(stateIds, state.StateId)
}
gysEnterpriseStates := []vend.GysEnterpriseState{}
dbc.DB.Table("gys_enterprise_state").Where("id in (?)", stateIds).Find(&gysEnterpriseStates)
gysEnterpriseStateMap := map[uint]vend.GysEnterpriseState{}
for _, state := range gysEnterpriseStates {
gysEnterpriseStateMap[state.ID] = state
}
newList := []gysUserState{}
for key, info := range list {
str := ""
infoE := gysEnterpriseStateMap[info.StateId]
str, infoE = getEn("", infoE)
list[key].EnterpriseStateUp = infoE
if q.IsPage != 1 {
if infoE.State != "2" {
continue
}
}
list[key].EnterpriseState = infoE
list[key].Name = infoE.EnterpriseName
list[key].StateStr = str
newList = append(newList, list[key])
}
if q.IsPage == 1 {
back.Suc(c, "", &BaseResponse{
List: newList,
Total: count,
})
} else {
back.Suc(c, "", newList)
}
// http.Suc(c, "", &BaseResponse{
// List: newList,
// Total: count,
// })
}
type vendUsers struct {
ID uint `gorm:"column:id;primary_key" json:"id"`
Username string `gorm:"username" json:"username"`
EnterpriseName string `gorm:"enterprise_name" json:"enterpriseName"`
}
type argsVend struct {
IsVerify uint `json:"isVerify" form:"isVerify"`
}
// @Style 供应商列表
func Vend(c *gin.Context) {
args := argsVend{}
err := tools.Params(&args, c)
if err != nil {
back.Fail(c, err.Error())
return
}
gysUsers := []vendUsers{}
if args.IsVerify == 1 {
// 采购根据权限获取供应商
var userId = c.MustGet("Manager_ID").(uint)
var user manage.UserInfo
user.ID = userId
if err := dbc.DB.Find(&user).Error; err != nil {
back.Fail(c, "数据错误:"+err.Error())
return
}
// 不是超级管理员
if user.RoleID != 1 {
dbc.DB.Table((&vend.GysUsers{}).TableName()+" gysuser").Joins(fmt.Sprintf("join %s state on gysuser.id = state.user_id", (&vend.GysEnterpriseState{}).TableName())).Where("gysuser.main_id = 0 and gysuser.id in (?)", strings.Split(user.VendsList, ",")).Select("gysuser.id,username,enterprise_name").Find(&gysUsers)
} else {
dbc.DB.Table((&vend.GysUsers{}).TableName() + " gysuser").Joins(fmt.Sprintf("join %s state on gysuser.id = state.user_id", (&vend.GysEnterpriseState{}).TableName())).Select("gysuser.id,username,enterprise_name").Where("gysuser.main_id = 0").Find(&gysUsers)
}
} else {
dbc.DB.Table((&vend.GysUsers{}).TableName() + " gysuser").Joins(fmt.Sprintf("join %s state on gysuser.id = state.user_id", (&vend.GysEnterpriseState{}).TableName())).Where("gysuser.main_id = 0").Select("gysuser.id,username,enterprise_name").Find(&gysUsers)
}
back.Suc(c, "操作成功", gysUsers)
}
type argsVendRole struct {
UserId uint `json:"userId" form:"userId"`
}
type vendRoleUsers struct {
vendUsers
Enable int `json:"enable"`
}
// @Style 有权限的供应商列表
func VendRole(c *gin.Context) {
args := argsVendRole{}
err := tools.Params(&args, c)
if err != nil {
back.Fail(c, err.Error())
return
}
if args.UserId <= 0 {
back.Fail(c, "参数错误")
return
}
var user manage.UserInfo
user.ID = args.UserId
if err := dbc.DB.Find(&user).Error; err != nil {
back.Fail(c, "数据错误:"+err.Error())
return
}
vendList := strings.Split(user.VendsList, ",")
vendIdsMap := map[uint]int{}
for _, vendIdStr := range vendList {
vendId, _ := strconv.ParseUint(vendIdStr, 10, 64)
vendIdsMap[uint(vendId)] = 1
}
gysUsers := []vendUsers{}
result := []vendRoleUsers{}
dbc.DB.Table((&vend.GysUsers{}).TableName()).Select("id,username").Where("is_interior = 1").Find(&gysUsers)
for _, gysUser := range gysUsers {
result = append(result, vendRoleUsers{
vendUsers: gysUser,
Enable: vendIdsMap[gysUser.ID],
})
}
back.Suc(c, "操作成功", &result)
}
func getEn(str string, infoE vend.GysEnterpriseState) (string, vend.GysEnterpriseState) {
if str == "" {
if infoE.ID > 0 {
if infoE.State == "2" {
str = "审核通过"
}
if infoE.State == "3" {
str = "审核未通过"
}
if infoE.State == "1" {
str = "待审核"
}
} else {
str = "未提交资质"
}
}
var brand []vend.GysEnterpriseBrand
dbc.DB.Where("enterprise_id = ?", infoE.ID).Find(&brand)
infoE.BrandList = BrandListCommon(brand)
var sector []vend.GysEnterpriseSector
dbc.DB.Where("enterprise_id = ?", infoE.ID).Find(&sector)
infoE.SectorList = sector
return str, infoE
}
type brandListParam struct {
UserId string `json:"UserId" validator:"required"`
}
func BrandList(c *gin.Context) {
var p brandListParam
err := tools.Params(&p, c)
if err != nil {
back.Fail(c, err.Error())
return
}
if len(p.UserId) == 0 {
back.Fail(c, "服务器异常请联系管理员")
return
}
var infoE vend.GysEnterpriseState
dbc.DB.Where("user_id = ? and state = 2", p.UserId).Order("id DESC").First(&infoE)
var brandList []vend.GysEnterpriseBrand
dbc.DB.Where("enterprise_id in(?,1) and user_id = ?", infoE.ID, p.UserId).Find(&brandList)
count := 0
dbc.DB.Table("gys_enterprise_brand").Where("enterprise_id in(?,1) and user_id = ?", infoE.ID, p.UserId).Count(&count)
back.Suc(c, "", &BaseResponse{
List: BrandListCommon(brandList),
Total: count,
})
}
type BaseResponse struct {
List interface{} `json:"data"`
Total int `json:"total"`
}
func BrandListCommon(brand []vend.GysEnterpriseBrand) []vend.GysEnterpriseBrand {
for key, brandInfo := range brand {
var sbimg []vend.GysEnterpriseImg
dbc.DB.Where("brand_id = ? and type = 1", brandInfo.ID).Find(&sbimg)
brand[key].SbImg = sbimg
var ppimg []vend.GysEnterpriseImg
dbc.DB.Where("brand_id=? and type = 2", brandInfo.ID).Find(&ppimg)
brand[key].PpImg = ppimg
var qtimg []vend.GysEnterpriseImg
dbc.DB.Where("brand_id=? and type = 3", brandInfo.ID).Find(&qtimg)
brand[key].QtImg = qtimg
var special []vend.GysEnterpriseSpecial
dbc.DB.Where("brand_id = ?", brandInfo.ID).Find(&special)
brand[key].Special = special
_brandInfo := goods.Brand{}
dbc.DB.Where("name = ?", brandInfo.Name).First(&_brandInfo)
if _brandInfo.ID > 0 {
brand[key].IsThis = true
} else {
brand[key].IsThis = false
}
}
return brand
}
//更新供应商编号
func ChangeVendCode(c *gin.Context) {
var code changeCode
err := tools.Params(&code, c)
if err != nil {
back.Fail(c, err.Error())
return
}
var gysUser vend.GysUsers
dbc.DB.First(&gysUser, "id =?", code.ID)
err = dbc.DB.Model(&gysUser).Update(&vend.GysUsers{GysCode: code.Code}).Error
if err != nil {
fmt.Println(err.Error())
back.Fail(c, "更新失败")
return
}
back.Suc(c, "更新成功", nil)
return
}