|
@@ -11,6 +11,7 @@ import (
|
|
|
"github.com/gin-gonic/gin"
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
|
+ "go.mongodb.org/mongo-driver/mongo/options"
|
|
|
)
|
|
|
|
|
|
// 供应商管理
|
|
@@ -30,6 +31,9 @@ func Supplier(r *GinRouter) {
|
|
|
|
|
|
// 删除供应商
|
|
|
r.POST("/supplier/delete/:id", DelSupplier)
|
|
|
+
|
|
|
+ // 获取供应商列表
|
|
|
+ r.GET("/plan/supplier/list", GetPlanSuppliers)
|
|
|
}
|
|
|
|
|
|
// 创建供应商
|
|
@@ -98,6 +102,128 @@ func GetSuppliers(c *gin.Context, apictx *ApiSession) (interface{}, error) {
|
|
|
return repo.RepoPageSearch(apictx.CreateRepoCtx(), option)
|
|
|
}
|
|
|
|
|
|
+func GetPlanSuppliers(c *gin.Context, apictx *ApiSession) (interface{}, error) {
|
|
|
+ page, size, query := UtilQueryPageSize(c)
|
|
|
+ //category =>根据内容查询 供应对应内容的供应商
|
|
|
+ emtyPage := &repo.PageResult{
|
|
|
+ Total: 0,
|
|
|
+ Size: size,
|
|
|
+ Page: page,
|
|
|
+ List: []map[string]interface{}{},
|
|
|
+ }
|
|
|
+ listOut := []map[string]interface{}{}
|
|
|
+
|
|
|
+ if query["matId"] != nil {
|
|
|
+ matId := query["matId"].(string)
|
|
|
+ if len(matId) < 1 {
|
|
|
+ return nil, fmt.Errorf("matId(string)为空")
|
|
|
+ }
|
|
|
+ id, _ := primitive.ObjectIDFromHex(matId)
|
|
|
+ ok, list := repo.RepoSeachDocsMap(apictx.CreateRepoCtx(), &repo.DocsSearchOptions{
|
|
|
+ CollectName: repo.CollectionSupplierMatprice,
|
|
|
+ Query: repo.Map{"productId": id},
|
|
|
+ Project: []string{"supplierId"},
|
|
|
+ })
|
|
|
+ if !ok {
|
|
|
+ return emtyPage, nil
|
|
|
+ }
|
|
|
+
|
|
|
+ listOut = list
|
|
|
+ } else {
|
|
|
+
|
|
|
+ if query["craftId"] == nil {
|
|
|
+ return nil, fmt.Errorf("参数错误 craftId 或matId不能为空")
|
|
|
+ }
|
|
|
+
|
|
|
+ cratf := &model.Craft{}
|
|
|
+
|
|
|
+ ok, _ := repo.RepoSeachDoc(apictx.CreateRepoCtx(), &repo.DocSearchOptions{
|
|
|
+ Query: repo.Map{"_id": query["craftId"].(string)},
|
|
|
+ CollectName: repo.CollectionCraft,
|
|
|
+ }, cratf)
|
|
|
+
|
|
|
+ if !ok {
|
|
|
+ return nil, fmt.Errorf("没有对应的工艺信息")
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询工艺分类
|
|
|
+ pipleLine := []bson.M{
|
|
|
+ {
|
|
|
+ "$lookup": bson.M{
|
|
|
+ "from": repo.CollectionCraft,
|
|
|
+ "localField": "productId",
|
|
|
+ "foreignField": "_id",
|
|
|
+ "as": "craft_docs",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "$match": bson.M{
|
|
|
+ "craft_docs.0.category": cratf.Category,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "$project": bson.M{
|
|
|
+ "craft_docs": 0,
|
|
|
+ "createTime": 0,
|
|
|
+ "price": 0,
|
|
|
+ "productId": 0,
|
|
|
+ "updateTime": 0,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ ctx := apictx.CreateRepoCtx()
|
|
|
+
|
|
|
+ colls := ctx.Client.GetCollection(repo.CollectionSupplierCraftprice)
|
|
|
+
|
|
|
+ findoptions := &options.AggregateOptions{}
|
|
|
+
|
|
|
+ cur, err := colls.Aggregate(ctx.Ctx, pipleLine, findoptions)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ defer cur.Close(ctx.Ctx)
|
|
|
+
|
|
|
+ err = cur.All(ctx.Ctx, &listOut)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if len(listOut) < 1 {
|
|
|
+ return emtyPage, nil
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取供应商列表
|
|
|
+ suppliers := []primitive.ObjectID{}
|
|
|
+ suppliersMap := map[string]bool{}
|
|
|
+ for _, item := range listOut {
|
|
|
+ if item["supplierId"] != nil {
|
|
|
+
|
|
|
+ id, ok := item["supplierId"].(primitive.ObjectID)
|
|
|
+ if !ok {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if !suppliersMap[id.Hex()] {
|
|
|
+ suppliers = append(suppliers, id)
|
|
|
+ suppliersMap[id.Hex()] = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(suppliers) < 1 {
|
|
|
+ return emtyPage, nil
|
|
|
+ }
|
|
|
+
|
|
|
+ option := &repo.PageSearchOptions{
|
|
|
+ CollectName: repo.CollectionSupplier,
|
|
|
+ Query: repo.Map{"_id": bson.M{"$in": suppliers}},
|
|
|
+ Page: page,
|
|
|
+ Size: size,
|
|
|
+ Sort: bson.M{"createTime": -1},
|
|
|
+ }
|
|
|
+ return repo.RepoPageSearch(apictx.CreateRepoCtx(), option)
|
|
|
+}
|
|
|
+
|
|
|
// 更新供应商
|
|
|
func UpdateSupplier(c *gin.Context, apictx *ApiSession) (interface{}, error) {
|
|
|
var supplier model.Supplier
|