package material import ( "encoding/json" "fmt" "strconv" "strings" "time" "dashoo.cn/backend/api/business/material" "dashoo.cn/backend/api/business/materialstorehouse" . "dashoo.cn/backend/api/controllers" "dashoo.cn/utils" "github.com/tealeg/xlsx" ) type MaterialController struct { BaseController } // @Title 物料基本信息列表 MaterialInfo // @Description get user by token // @Success 200 {object} models.Userblood // @router /materiallist [get] func (this *MaterialController) Materiallist() { page := this.GetPageInfoForm() where := " 1=1 " orderby := "Id" asc := true Order := this.GetString("Order") Prop := this.GetString("Prop") if Order != "" && Prop != "" { orderby = Prop if Order == "desc" { asc = false } } Code := this.GetString("Code") if Code != "" { where = where + " and Code like '%" + Code + "%' " } Name := this.GetString("Name") if Name != "" { where = where + " and (Name like '%" + Name + "%' or Symbol like '%" + Name + "%') " } Category := this.GetString("Category") if Category != "" { where = where + " and Category= " + Category } Brand := this.GetString("Brand") if Brand != "" { where = where + " and Brand like '%" + Brand + "%' " } Supplier := this.GetString("Supplier") if Supplier != "" { where = where + " and Supplier like '%" + Supplier + "%' " } GoodsNo := this.GetString("GoodsNo") if GoodsNo != "" { where = where + " and GoodsNo like '%" + GoodsNo + "%' " } svc := material.GetMaterialService(utils.DBE) var list []material.MaterialInfo total := svc.GetPagingEntitiesWithOrderBytbl(this.User.AccCode, page.CurrentPage, page.Size, orderby, asc, &list, where) var datainfo DataInfo datainfo.Items = list datainfo.CurrentItemCount = total this.Data["json"] = &datainfo this.ServeJSON() } // @Title 获取物料下拉框 MaterialInfo // @Description get user by token // @Success 200 {object} models.Userblood // @router /getmateriallist [get] func (this *MaterialController) GetMaterialListByWhere() { where := " 1=1 " Category := this.GetString("Category") if Category != "" { where = where + " and Category = " + Category } svc := material.GetMaterialService(utils.DBE) var list []material.MaterialInfo svc.GetEntitysByWhere(this.User.AccCode+MaterialInfoName, where, &list) var datainfo DataInfo datainfo.Items = list this.Data["json"] = &datainfo this.ServeJSON() } // @Title 入库申请信息列表 MaterialRKHead // @Description get user by token // @Success 200 {object} models.Userblood // @router /rklist [get] func (this *MaterialController) RKlist() { page := this.GetPageInfoForm() where := " 1=1 " orderby := "Id" asc := false Order := this.GetString("Order") Prop := this.GetString("Prop") if Order != "" && Prop != "" { orderby = Prop if orderby == "StoreHouseName" { orderby = "StoreHouseId" } if Order == "asc" { asc = true } } RKNo := this.GetString("RKNo") if RKNo != "" { where = where + " and RKNo like '%" + RKNo + "%' " } RKDate := this.GetString("RKDate") if RKDate != "" { dates := strings.Split(RKDate, ",") if len(dates) == 2 { ValidityminDate := dates[0] ValiditymaxDate := dates[1] where = where + " and RKDate>='" + ValidityminDate + "' and RKDate<='" + ValiditymaxDate + "'" } } RKType := this.GetString("RKType") if RKType != "" { where = where + " and RKType=" + RKType + " " } AuditorStatus := this.GetString("AuditorStatus") if AuditorStatus != "" { where = where + " and AuditorStatus=" + AuditorStatus + " " } StoreHouseId := this.GetString("StoreHouseId") if StoreHouseId != "" { where = where + " and StoreHouseId =" + StoreHouseId + " " } svc := material.GetMaterialService(utils.DBE) var list []material.MaterialRKHead total := svc.GetPagingEntitiesWithOrderBytbl(this.User.AccCode, page.CurrentPage, page.Size, orderby, asc, &list, where) var datainfo DataInfo datainfo.Items = list datainfo.CurrentItemCount = total this.Data["json"] = &datainfo this.ServeJSON() } // @Title 根据ID 查询物料详情 MaterialInfo // @Description get SampleType by token // @Success 200 // @router /getmaterialdetail/:id [get] func (this *MaterialController) GetMaterialdetailById() { id := this.Ctx.Input.Param(":id") var model material.MaterialInfo svc := material.GetMaterialService(utils.DBE) svc.GetEntityByIdBytbl(this.User.AccCode+MaterialInfoName, id, &model) var datainfo DataInfo datainfo.Items = model this.Data["json"] = &datainfo this.ServeJSON() } // @Title 保存当前修改的基本信息 MaterialInfo // @Success 200 {object} controllers.Request // @router /editmaterialinfo/:id [put] func (this *MaterialController) Saveedit() { id := this.Ctx.Input.Param(":id") Name := this.GetString("Name") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialInfo var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) var entityempty material.MaterialInfo svc := material.GetMaterialService(utils.DBE) var eneity material.MaterialInfo where := "Name='" + model.Name + "' and Code='" + model.Code + "' and Id!=" + id has := svc.GetEntityByWhere(this.User.AccCode+MaterialInfoName, where, &eneity) if has { errinfo.Message = "该物料已存在,请勿重复添加!" errinfo.Code = -3 this.Data["json"] = &errinfo this.ServeJSON() return } model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "编辑物料" + Name var cols []string = []string{"Code", "Name", "Unit", "ValidityLong", "ValidityLongType", "Temperature", "RKUnit", "RKRatio", "CKUnit", "CKRatio", "KCUnit", "KCRatio", "ProductSpec", "KCCount", "DefaultPrice", "NewestPrice", "Brand", "Category", "KCMin", "KCMax", "CategoryName", "Supplier", "GoodsNo", "Photo", "BarCode", "QRCode", "Symbol", "PUnit1", "PUnit2", "Remark", "ModifiedUserId", "ModifiedBy"} err := svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialInfoName, BaseOperationLogName, id, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 新增物料信息 MaterialInfo // @Description // @Success 200 {object} controllers.Request // @router /addmaterialinfo [post] func (this *MaterialController) AddMaterialInfo() { var errinfo ErrorDataInfo var model material.MaterialInfo var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) model.CreateBy = this.User.Realname model.CreateUserId, _ = utils.StrTo(this.User.Id).Int() svc := material.GetMaterialService(utils.DBE) var eneity material.MaterialInfo where := "Name='" + model.Name + "' and Code='" + model.Code + "'" has := svc.GetEntityByWhere(this.User.AccCode+MaterialInfoName, where, &eneity) if has { errinfo.Message = "该物料已存在,请勿重复添加!" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } _, err := svc.InsertEntityBytbl(this.User.AccCode+MaterialInfoName, &model) if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 errinfo.Item = model.Id this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 删除基本信息 MaterialInfo // @Description // @Success 200 {object} ErrorInfo // @Failure 403 :id 为空 // @router /deletematerialinfo/:id [delete] func (this *MaterialController) DeleteMaterialinfo() { Name := this.GetString("Name") id := this.Ctx.Input.Param(":id") var errinfo ErrorInfo if id == "" || Name == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var entity material.MaterialInfo var entityempty material.MaterialInfo opdesc := "删除物料-" + Name svc := material.GetMaterialService(utils.DBE) err := svc.DeleteOperationAndWriteLogBytbl(this.User.AccCode+MaterialInfoName, BaseOperationLogName, id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { errinfo.Message = "删除成功" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "删除失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 删除入库主表信息 MaterialRKHead // @Description // @Success 200 {object} ErrorInfo // @Failure 403 :id 为空 // @router /deletematerialRKhead/:id [delete] func (this *MaterialController) MaterialRKHeadDelete() { id := this.Ctx.Input.Param(":id") RKNo := this.GetString("RKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -0 this.Data["json"] = &errinfo this.ServeJSON() return } var entity material.MaterialRKHead var entityempty material.MaterialRKHead opdesc := "删除入库单-" + RKNo svc := material.GetMaterialService(utils.DBE) err := svc.DeleteOperationAndWriteLogBytbl(this.User.AccCode+MaterialRKHeadName, BaseOperationLogName, id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { where := " RKNo=" + RKNo _ = svc.DeleteEntityBytbl(this.User.AccCode+MaterialRKDetailName, where) } if err == nil { errinfo.Message = "删除成功" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "删除失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title ixcell制备模板 获取主表信息 // @Description get user by token // @Success 200 {object} models.Userblood // @router /getmaterialmianlist [get] func (this *MaterialController) GetMaterialMainlist() { page := this.GetPageInfoForm() where := " 1=1 " Name := this.GetString("Name") if Name != "" { where = where + " and (Name like '%" + Name + "%' or Symbol like '%" + Name + "%') " } Supplier := this.GetString("Supplier") if Supplier != "" { where = where + " and Supplier like '%" + Supplier + "%' " } Category := this.GetString("Category") if Category != "" { where = where + " and Category= " + Category } GoodsNo := this.GetString("GoodsNo") if GoodsNo != "" { where = where + " and GoodsNo like '%" + GoodsNo + "%' " } Brand := this.GetString("Brand") if Brand != "" { where = where + " and Brand like '%" + Brand + "%' " } svc := material.GetMaterialService(utils.DBE) var list []material.MaterialInfo total := svc.GetPagingEntitiesWithOrderBytbl(this.User.AccCode, page.CurrentPage, page.Size, "Id ", true, &list, where) var datainfo DataInfo datainfo.Items = list datainfo.CurrentItemCount = total this.Data["json"] = &datainfo this.ServeJSON() } // @Title 根据批号BatchNo减去MaterialBatchKC的KCCount数量 // @Description 根据物品名称Name减去MaterialInfo的KCCount数量 // @Success 200 {object} controllers.Request // @router /putkcinfo [put] func (this *MaterialController) Putkcinfo() { var model material.MaterialBatchKC var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) HouseId := this.GetHouseIdByLoginuser() where := " StoreHouseId= " + utils.ToStr(HouseId) addflag := this.GetString("add") MaterialId := this.GetString("MaterialId") if MaterialId != "" { where = where + " and MaterialId= " + MaterialId } infowhere := " Id= '" + MaterialId + "' " svc := material.GetMaterialService(utils.DBE) if addflag == "1" { //撤销物料操作,返还出库数量 // var PrepInfoDetail cellspreparation.CellsPreparationInfoDetail // PrepInfoDetailId := this.GetString("detailid") // svc.GetEntityByIdBytbl(this.User.AccCode+CellsPreparationInfoDetailName, PrepInfoDetailId, &PrepInfoDetail) // where = where + " and BatchNo= '" + PrepInfoDetail.Data1 + "'" // svc.UpdateaddKCinfo(this.User.AccCode+MaterialBatchKCName, where, utils.ToStr(model.KCCount)) // svc.UpdateaddKCinfo(this.User.AccCode+MaterialInfoName, infowhere, utils.ToStr(model.KCCount)) } else { if model.BatchNo != "" { where = where + " and BatchNo= '" + model.BatchNo + "'" } svc.UpdatesubKCinfo(this.User.AccCode+MaterialBatchKCName, where, utils.ToStr(model.KCCount)) svc.UpdatesubKCinfo(this.User.AccCode+MaterialInfoName, infowhere, utils.ToStr(model.KCCount)) } } // @Title 库存列表 MaterialBatchKC // @Description get user by token // @Success 200 {object} models.Userblood // @router /materialbatchKClist [get] func (this *MaterialController) MaterialBatchKClist() { page := this.GetPageInfoForm() where := " a.KCCount <> 0 " orderby := "a.CreateOn desc" Order := this.GetString("Order") Prop := this.GetString("Prop") if Order != "" && Prop != "" { orderby = Prop + " " + Order } BatchNo := this.GetString("BatchNo") if BatchNo != "" { where = where + " and a.BatchNo like '%" + BatchNo + "%' " } ProductDate := this.GetString("ProductDate") if ProductDate != "" { dates := strings.Split(ProductDate, ",") if len(dates) == 2 { ProductminDate := dates[0] ProductmaxDate := dates[1] where = where + " and ProductDate>='" + ProductminDate + "' and ProductDate<='" + ProductmaxDate + "'" } } ValidityDate := this.GetString("ValidityDate") if ValidityDate != "" { dates := strings.Split(ValidityDate, ",") if len(dates) == 2 { ValidityminDate := dates[0] ValiditymaxDate := dates[1] where = where + " and ValidityDate>='" + ValidityminDate + "' and ValidityDate<='" + ValiditymaxDate + "'" } } Code := this.GetString("Code") if Code != "" { where = where + " and b.Code like '%" + Code + "%' " } Name := this.GetString("Name") if Name != "" { where = where + " and (b.Name like '%" + Name + "%' or b.Symbol like '%" + Name + "%') " } Category := this.GetString("Category") if Category != "" { where = where + " and b.Category= " + Category } Brand := this.GetString("Brand") if Brand != "" { where = where + " and b.Brand like '%" + Brand + "%' " } Supplier := this.GetString("Supplier") if Supplier != "" { where = where + " and b.Supplier like '%" + Supplier + "%' " } GoodsNo := this.GetString("GoodsNo") if GoodsNo != "" { where = where + " and b.GoodsNo like '%" + GoodsNo + "%' " } StoreHouseId := this.GetString("StoreHouseId") if StoreHouseId != "" { where = where + " and c.Id =" + StoreHouseId + " " } svc := material.GetMaterialService(utils.DBE) total, list := svc.GetPagingMaterialBatchKCByWhere(this.User.AccCode+MaterialBatchKCName, this.User.AccCode+MaterialInfoName, this.User.AccCode+MaterialStoreHouseName, page.CurrentPage, page.Size, orderby, where) var datainfo DataInfo datainfo.Items = list datainfo.CurrentItemCount = total this.Data["json"] = &datainfo this.ServeJSON() } // @Title 根据ID 查询物料库存详情 MaterialBatchKC // @Description get SampleType by token // @Success 200 // @router /getmaterialKCdetail/:id [get] func (this *MaterialController) GetMaterialKCdetailById() { id := this.Ctx.Input.Param(":id") var model material.MaterialBatchKC svc := material.GetMaterialService(utils.DBE) svc.GetEntityByIdBytbl(this.User.AccCode+MaterialBatchKCName, id, &model) var datainfo DataInfo datainfo.Items = model this.Data["json"] = &datainfo this.ServeJSON() } // @Title 仓库列表 MaterialStoreHouse // @Description get user by token // @Success 200 {object} models.Userblood // @router /getstorehouselist [get] func (this *MaterialController) MaterialStoreHouselist() { where := " 1=1 " svc := material.GetMaterialService(utils.DBE) var list []material.MaterialStoreHouse svc.GetEntitysByWhere(this.User.AccCode+MaterialStoreHouseName, where, &list) var datainfo DataInfo datainfo.Items = list this.Data["json"] = &datainfo this.ServeJSON() } // @Title 新增入库主单信息 MaterialRKHead // @Description // @Success 200 {object} controllers.Request // @router /addmaterialRKhead [post] func (this *MaterialController) AddMaterialRKHead() { var model material.MaterialRKHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) model.CreateBy = this.User.Realname model.CreateUserId, _ = utils.StrTo(this.User.Id).Int() svc := material.GetMaterialService(utils.DBE) _, err := svc.InsertEntityBytbl(this.User.AccCode+MaterialRKHeadName, &model) var errinfo ErrorDataInfo if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 errinfo.Item = model.Id this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 编辑入库主单信息 MaterialRKHead // @Success 200 {object} controllers.Request // @router /editmaterialRKhead/:id [put] func (this *MaterialController) EditMaterialRKHead() { id := this.Ctx.Input.Param(":id") RKNo := this.GetString("RKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialRKHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) var entityempty material.MaterialRKHead svc := material.GetMaterialService(utils.DBE) model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "编辑入库单" + RKNo var cols []string = []string{"StoreHouseId", "RKType", "RKTypeName", "TotalPrice", "RKDate", "RKPersionId", "RKPersion", "SourceId", "SourceName", "Remark", "ModifiedUserId", "ModifiedBy"} err := svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialRKHeadName, BaseOperationLogName, id, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 新增入库单详细信息 MaterialRKDetail // @Description // @Success 200 {object} controllers.Request // @router /addmaterialRKdetail [post] func (this *MaterialController) AddMaterialRKDetail() { var model material.MaterialRKDetail var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) model.CreateBy = this.User.Realname model.CreateUserId, _ = utils.StrTo(this.User.Id).Int() svc := material.GetMaterialService(utils.DBE) _, err := svc.InsertEntityBytbl(this.User.AccCode+MaterialRKDetailName, &model) var errinfo ErrorDataInfo if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 errinfo.Item = model.Id this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 根据入库单号,查询入库单详情 MaterialRKDetail // @Description get user by token // @Success 200 {object} models.Userblood // @router /getRKdetaillistbyRKNo/:RKNo [get] func (this *MaterialController) GetRKDetailListByRKNo() { page := this.GetPageInfoForm() RKNo := this.Ctx.Input.Param(":RKNo") where := " a.RKNo= '" + RKNo + "' " svc := material.GetMaterialService(utils.DBE) total, list := svc.GetPagingMaterialRKDetailByWhere(this.User.AccCode+MaterialRKDetailName, this.User.AccCode+MaterialInfoName, page.CurrentPage, page.Size, " a.CreateOn desc ", where) var datainfo DataInfo datainfo.Items = list datainfo.CurrentItemCount = total this.Data["json"] = &datainfo this.ServeJSON() } // @Title 根据入库单号,查询入库单详情 无分页 计算入库单总价 MaterialRKDetail // @Description get user by token // @Success 200 {object} models.Userblood // @router /getRKdetailbyRKNo/:RKNo [get] func (this *MaterialController) GetRKDetailByRKNo() { RKNo := this.Ctx.Input.Param(":RKNo") var list []material.MaterialRKDetail where := " RKNo= '" + RKNo + "' " svc := material.GetMaterialService(utils.DBE) svc.GetEntitysByWhere(this.User.AccCode+MaterialRKDetailName, where, &list) var datainfo DataInfo datainfo.Items = list this.Data["json"] = &datainfo this.ServeJSON() } // @Title 编辑入库单详细信息 MaterialRKDetail // @Success 200 {object} controllers.Request // @router /editmaterialRKdetail/:id [put] func (this *MaterialController) EditMaterialRKDetail() { id := this.Ctx.Input.Param(":id") RKNo := this.GetString("RKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialRKDetail var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) var entityempty material.MaterialRKDetail svc := material.GetMaterialService(utils.DBE) model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "编辑入库单" + RKNo var cols []string = []string{"BatchNo", "ShelfNo", "Allocation", "RKCount", "Unit", "UnitPrice", "TotalPrice", "ProductDate", "ValidityDate", "Remark", "ModifiedUserId", "ModifiedBy"} err := svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialRKDetailName, BaseOperationLogName, id, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 删除入库单详情信息 MaterialRKDetail // @Description // @Success 200 {object} ErrorInfo // @Failure 403 :id 为空 // @router /deletematerialRKdetail/:id [delete] func (this *MaterialController) MaterialRKDetailDelete() { id := this.Ctx.Input.Param(":id") RKNo := this.GetString("RKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -0 this.Data["json"] = &errinfo this.ServeJSON() return } var entity material.MaterialRKDetail var entityempty material.MaterialRKDetail opdesc := "删除入库单详情-" + RKNo svc := material.GetMaterialService(utils.DBE) err := svc.DeleteOperationAndWriteLogBytbl(this.User.AccCode+MaterialRKDetailName, BaseOperationLogName, id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { errinfo.Message = "删除成功" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "删除失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 根据入库单Id 查询入库单主信息 MaterialRKHead // @Description get SampleType by token // @Success 200 // @router /getmaterialRKheaddetail/:id [get] func (this *MaterialController) GetMaterialRKHeadDetailById() { id := this.Ctx.Input.Param(":id") var model material.MaterialRKHead svc := material.GetMaterialService(utils.DBE) svc.GetEntityByIdBytbl(this.User.AccCode+MaterialRKHeadName, id, &model) var datainfo DataInfo datainfo.Items = model this.Data["json"] = &datainfo this.ServeJSON() } // @Title 入库单审核 MaterialRKHead // @Success 200 {object} controllers.Request // @router /auditorRKhead/:id [put] func (this *MaterialController) AuditorRKHeadById() { id := this.Ctx.Input.Param(":id") RKNo := this.GetString("RKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialRKHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) var entityempty material.MaterialRKHead svc := material.GetMaterialService(utils.DBE) model.AuditorOn = time.Now() model.AuditorUserId, _ = utils.StrTo(this.User.Id).Int() model.AuditorBy = this.User.Realname model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "审核入库单" + RKNo var cols []string = []string{"StoreHouseId", "RKType", "RKTypeName", "TotalPrice", "RKDate", "RKPersionId", "RKPersion", "SourceId", "SourceName", "AuditorStatus", "AuditorOn", "AuditorUserId", "AuditorBy", "ModifiedUserId", "Remark", "ModifiedBy"} err := svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialRKHeadName, BaseOperationLogName, id, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { this.InsertMaterialBatchKC(RKNo) } if err == nil { errinfo.Message = "审核成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "审核失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } //入库单审核通过后更新库存信息 MaterialBatchKC func (this *MaterialController) InsertMaterialBatchKC(RKNo string) { var rkhead material.MaterialRKHead var rkdetail []material.MaterialRKDetail var batchkc material.MaterialBatchKC svc := material.GetMaterialService(utils.DBE) where_RKNo := " RKNo='" + RKNo + "' " //根据入库单号查询入库主单信息 svc.GetEntityByWhere(this.User.AccCode+MaterialRKHeadName, where_RKNo, &rkhead) //根据入库单查询入库详情 svc.GetEntitysByWhere(this.User.AccCode+MaterialRKDetailName, where_RKNo, &rkdetail) for i := 0; i < len(rkdetail); i++ { where_BatchKC := " StoreHouseId=" + utils.ToStr(rkhead.StoreHouseId) + " and MaterialId=" + utils.ToStr(rkdetail[i].MaterialId) + " and BatchNo='" + rkdetail[i].BatchNo + "' " has := svc.GetEntityByWhere(this.User.AccCode+MaterialBatchKCName, where_BatchKC, &batchkc) if has { rkcount, _ := utils.StrTo(rkdetail[i].RKCount).Float32() batchkc.KCCount = batchkc.KCCount + rkcount batchkc.RKDate = rkhead.RKDate batchkc.ProductDate = rkdetail[i].ProductDate batchkc.ValidityDate = rkdetail[i].ValidityDate batchkc.Price = rkdetail[i].UnitPrice batchkc.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() batchkc.ModifiedBy = this.User.Realname var entityempty material.MaterialBatchKC opdesc := "新增库存" + rkdetail[i].BatchNo var cols []string = []string{"KCCount", "RKDate", "ProductDate", "ValidityDate", "Price", "ModifiedUserId", "ModifiedBy"} _ = svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialBatchKCName, BaseOperationLogName, batchkc.Id, &batchkc, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") } else { batchkc.StoreHouseId = rkhead.StoreHouseId batchkc.MaterialId = rkdetail[i].MaterialId batchkc.BatchNo = utils.ToStr(rkdetail[i].BatchNo) batchkc.KCCount, _ = utils.StrTo(rkdetail[i].RKCount).Float32() batchkc.RKDate = rkhead.RKDate batchkc.ProductDate = rkdetail[i].ProductDate batchkc.ValidityDate = rkdetail[i].ValidityDate batchkc.Price = rkdetail[i].UnitPrice //batchkc.Remark = rkdetail[i].Remark batchkc.CreateBy = this.User.Realname batchkc.CreateUserId, _ = utils.StrTo(this.User.Id).Int() _, _ = svc.InsertEntityBytbl(this.User.AccCode+MaterialBatchKCName, &batchkc) } where_materialid := " Id=" + utils.ToStr(rkdetail[i].MaterialId) svc.UpdateaddKCinfo(this.User.AccCode+MaterialInfoName, where_materialid, rkdetail[i].RKCount) batchkc = material.MaterialBatchKC{} } } // @Title 入库单审核撤销 MaterialRKHead // @Success 200 {object} controllers.Request // @router /cancelRKhead/:id [put] func (this *MaterialController) CancelRKHeadById() { id := this.Ctx.Input.Param(":id") RKNo := this.GetString("RKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialRKHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) var entityempty material.MaterialRKHead svc := material.GetMaterialService(utils.DBE) model.AuditorOn = time.Now() model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "撤销入库单审核" + RKNo var cols []string = []string{"AuditorStatus", "AuditorOn", "ModifiedUserId", "ModifiedBy"} err := svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialRKHeadName, BaseOperationLogName, id, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { this.DelMaterialBatchKC(RKNo) } if err == nil { errinfo.Message = "操作成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "操作失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } //入库单审核撤销后更新库存信息 MaterialBatchKC func (this *MaterialController) DelMaterialBatchKC(RKNo string) { var rkhead material.MaterialRKHead var rkdetail []material.MaterialRKDetail var batchkc material.MaterialBatchKC svc := material.GetMaterialService(utils.DBE) where_RKNo := " RKNo='" + RKNo + "' " //根据入库单号查询入库主单信息 svc.GetEntityByWhere(this.User.AccCode+MaterialRKHeadName, where_RKNo, &rkhead) //根据入库单查询入库详情 svc.GetEntitysByWhere(this.User.AccCode+MaterialRKDetailName, where_RKNo, &rkdetail) for i := 0; i < len(rkdetail); i++ { where_BatchKC := " StoreHouseId=" + utils.ToStr(rkhead.StoreHouseId) + " and MaterialId=" + utils.ToStr(rkdetail[i].MaterialId) + " and BatchNo='" + rkdetail[i].BatchNo + "' " has := svc.GetEntityByWhere(this.User.AccCode+MaterialBatchKCName, where_BatchKC, &batchkc) if has { rkcount, _ := utils.StrTo(rkdetail[i].RKCount).Float32() batchkc.KCCount = batchkc.KCCount - rkcount batchkc.RKDate = rkhead.RKDate batchkc.ProductDate = rkdetail[i].ProductDate batchkc.ValidityDate = rkdetail[i].ValidityDate batchkc.Price = rkdetail[i].UnitPrice batchkc.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() batchkc.ModifiedBy = this.User.Realname var entityempty material.MaterialBatchKC opdesc := "撤销新增库存" + rkdetail[i].BatchNo var cols []string = []string{"KCCount", "RKDate", "ProductDate", "ValidityDate", "Price", "ModifiedUserId", "ModifiedBy"} _ = svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialBatchKCName, BaseOperationLogName, batchkc.Id, &batchkc, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") } where_materialid := " Id=" + utils.ToStr(rkdetail[i].MaterialId) svc.UpdatecancelKCinfo(this.User.AccCode+MaterialInfoName, where_materialid, rkdetail[i].RKCount) batchkc = material.MaterialBatchKC{} } } // @Title 判断库存信息是否存在 // @Description get SampleType by token // @Success 200 // @router /getexitkucuninfo/ [get] func (this *MaterialController) Getexitkucuninfo() { var list []material.MaterialCKHead ReceiveUserId := this.User.Id where := " 1=1 " CKType := this.GetString("CKType") if CKType != "" { where = where + " and CKType= " + CKType } where = where + " and ReceiveUserId=" + ReceiveUserId + " " var dataformat = "2006-01-02" nowdata := time.Now().Format(dataformat) starttime, endtime := nowdata, nowdata+" 23:59:59" where = where + " and CKDate>='" + starttime + "' and CKDate<='" + endtime + "'" svc := material.GetMaterialService(utils.DBE) svc.GetEntitysByWhere(this.User.AccCode+MaterialCKHeadName, where, &list) var datainfo DataInfo datainfo.Items = list this.Data["json"] = &datainfo this.ServeJSON() } // @Title ixcell细胞制备 新增出库单主信息 // @Description // @Success 200 {object} controllers.Request // @router /addkucuninfo [post] func (this *MaterialController) Addchukuinfo() { var model material.MaterialCKHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) model.CKPersionId, _ = utils.StrTo(this.User.Id).Int() model.CKPersion = this.User.Realname model.ReceiveUserId, _ = utils.StrTo(this.User.Id).Int() model.ReceiveUserBy = this.User.Realname model.ReceiveId, _ = utils.StrTo(this.User.DepartmentId).Int() model.ReceiveName = this.User.Realname model.CreateBy = this.User.Realname model.CreateUserId, _ = utils.StrTo(this.User.Id).Int() model.StoreHouseId = this.GetHouseIdByLoginuser() svc := material.GetMaterialService(utils.DBE) _, err := svc.InsertEntityBytbl(this.User.AccCode+MaterialCKHeadName, &model) var errinfo ErrorDataInfo if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 errinfo.Item = model.Id this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title ixcell细胞制备 新增出库单详细信息 // @Description // @Success 200 {object} controllers.Request // @router /addkucundetailinfo [post] func (this *MaterialController) Addkucundetailinfo() { var model material.MaterialCKDetail var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) model.CreateBy = this.User.Realname model.CreateUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname svc := material.GetMaterialService(utils.DBE) _, err := svc.InsertEntityBytbl(this.User.AccCode+MaterialCKDetailName, &model) var errinfo ErrorDataInfo if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 errinfo.Item = model.Id this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 修改库存detail表信息 // @Success 200 {object} controllers.Request // @router /editkucundetailinfo/:id [put] func (this *MaterialController) Editkucundetailinfo() { id := this.Ctx.Input.Param(":id") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialCKDetail var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) svc := material.GetMaterialService(utils.DBE) model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname var cols []string = []string{"CKCount"} err := svc.UpdateEntityBytbl(this.User.AccCode+MaterialCKDetailName, id, &model, cols) if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 新增出库单主信息 MaterialCKHead // @Description // @Success 200 {object} controllers.Request // @router /addmaterialCKhead [post] func (this *MaterialController) AddMaterialCKHead() { var model material.MaterialCKHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) model.CreateBy = this.User.Realname model.CreateUserId, _ = utils.StrTo(this.User.Id).Int() svc := material.GetMaterialService(utils.DBE) _, err := svc.InsertEntityBytbl(this.User.AccCode+MaterialCKHeadName, &model) var errinfo ErrorDataInfo if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 errinfo.Item = model.Id this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 出库申请信息列表 MaterialCKHead // @Description get user by token // @Success 200 {object} models.Userblood // @router /getCKheadlist [get] func (this *MaterialController) GetMaterialCKHeadList() { page := this.GetPageInfoForm() where := " 1=1 " orderby := "Id" asc := false Order := this.GetString("Order") Prop := this.GetString("Prop") if Order != "" && Prop != "" { orderby = Prop if orderby == "StoreHouseName" { orderby = "StoreHouseId" } if Order == "asc" { asc = true } } CKNo := this.GetString("CKNo") if CKNo != "" { where = where + " and CKNo like '%" + CKNo + "%' " } SaleNo := this.GetString("SaleNo") if SaleNo != "" { where = where + " and SaleNo like '%" + SaleNo + "%' " } CKPersion := this.GetString("CKPersion") if CKPersion != "" { where = where + " and CKPersion like '%" + CKPersion + "%' " } CKDate := this.GetString("CKDate") if CKDate != "" { dates := strings.Split(CKDate, ",") if len(dates) == 2 { ValidityminDate := dates[0] ValiditymaxDate := dates[1] where = where + " and CKDate>='" + ValidityminDate + "' and CKDate<='" + ValiditymaxDate + "'" } } CKType := this.GetString("CKType") if CKType != "" { where = where + " and CKType=" + CKType + " " } AuditorStatus := this.GetString("AuditorStatus") if AuditorStatus != "" { where = where + " and AuditorStatus=" + AuditorStatus + " " } StoreHouseId := this.GetString("StoreHouseId") if StoreHouseId != "" { where = where + " and StoreHouseId =" + StoreHouseId + " " } ReceiveId := this.GetString("ReceiveId") if ReceiveId != "" { where = where + " and ReceiveId =" + ReceiveId + " " } svc := material.GetMaterialService(utils.DBE) var list []material.MaterialCKHead total := svc.GetPagingEntitiesWithOrderBytbl(this.User.AccCode, page.CurrentPage, page.Size, orderby, asc, &list, where) var datainfo DataInfo datainfo.Items = list datainfo.CurrentItemCount = total this.Data["json"] = &datainfo this.ServeJSON() } // @Title 删除出库主表信息 MaterialCKHead // @Description // @Success 200 {object} ErrorInfo // @Failure 403 :id 为空 // @router /deletematerialCKhead/:id [delete] func (this *MaterialController) MaterialCKHeadDelete() { id := this.Ctx.Input.Param(":id") CKNo := this.GetString("CKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -0 this.Data["json"] = &errinfo this.ServeJSON() return } var entity material.MaterialCKHead var entityempty material.MaterialCKHead opdesc := "删除出库单-" + CKNo svc := material.GetMaterialService(utils.DBE) err := svc.DeleteOperationAndWriteLogBytbl(this.User.AccCode+MaterialCKHeadName, BaseOperationLogName, id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { where := " CKNo='" + CKNo + "' " _ = svc.DeleteEntityBytbl(this.User.AccCode+MaterialCKDetailName, where) } if err == nil { errinfo.Message = "删除成功" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "删除失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 根据出库单Id 查询出库单主信息 MaterialCKHead // @Description get SampleType by token // @Success 200 // @router /getmaterialCKheaddetail/:id [get] func (this *MaterialController) GetMaterialCKHeadDetailById() { id := this.Ctx.Input.Param(":id") var model material.MaterialCKHead svc := material.GetMaterialService(utils.DBE) svc.GetEntityByIdBytbl(this.User.AccCode+MaterialCKHeadName, id, &model) var datainfo DataInfo datainfo.Items = model this.Data["json"] = &datainfo this.ServeJSON() } // @Title 编辑出库主单信息 MaterialCKHead // @Success 200 {object} controllers.Request // @router /editmaterialCKhead/:id [put] func (this *MaterialController) EditMaterialCKHead() { id := this.Ctx.Input.Param(":id") CKNo := this.GetString("CKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialCKHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) var entityempty material.MaterialCKHead svc := material.GetMaterialService(utils.DBE) model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "编辑出库单-" + CKNo var cols []string = []string{"StoreHouseId", "CKType", "CKTypeName", "CKPersionId", "CKPersion", "TotalPrice", "CKDate", "SaleNo", "ReceiveId", "ReceiveName", "ReceiveUserId", "ReceiveUserBy", "Remark", "ModifiedUserId", "ModifiedBy"} err := svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialCKHeadName, BaseOperationLogName, id, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 新增出库单详情信息 MaterialCKDetail // @Description // @Success 200 {object} controllers.Request // @router /addmaterialCKdetail [post] func (this *MaterialController) AddMaterialCKDetail() { var model material.MaterialCKDetail var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) model.CreateBy = this.User.Realname model.CreateUserId, _ = utils.StrTo(this.User.Id).Int() svc := material.GetMaterialService(utils.DBE) _, err := svc.InsertEntityBytbl(this.User.AccCode+MaterialCKDetailName, &model) var errinfo ErrorDataInfo if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 errinfo.Item = model.Id this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 编辑出库单详情信息 MaterialCKDetail // @Success 200 {object} controllers.Request // @router /editmaterialCKdetail/:id [put] func (this *MaterialController) EditMaterialCKDetail() { id := this.Ctx.Input.Param(":id") CKNo := this.GetString("CKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialCKDetail var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) var entityempty material.MaterialCKDetail svc := material.GetMaterialService(utils.DBE) model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "编辑出库单" + CKNo var cols []string = []string{"BatchNo", "CKCount", "CKWeight", "UnitPrice", "TotalPrice", "Remark", "ModifiedUserId", "ModifiedBy"} err := svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialCKDetailName, BaseOperationLogName, id, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 删除入库单详情信息 MaterialCKDetail // @Description // @Success 200 {object} ErrorInfo // @Failure 403 :id 为空 // @router /deletematerialCKdetail/:id [delete] func (this *MaterialController) MaterialCKDetailDelete() { id := this.Ctx.Input.Param(":id") CKNo := this.GetString("CKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -0 this.Data["json"] = &errinfo this.ServeJSON() return } var entity material.MaterialCKDetail var entityempty material.MaterialCKDetail opdesc := "删除出库单详情-" + CKNo svc := material.GetMaterialService(utils.DBE) err := svc.DeleteOperationAndWriteLogBytbl(this.User.AccCode+MaterialCKDetailName, BaseOperationLogName, id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { errinfo.Message = "删除成功" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "删除失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 根据仓库、物料类型 查询库存对应的物料 MaterialBatchKC // @Description get user by token // @Success 200 {object} models.Userblood // @router /getmaterialbatchKClist [get] func (this *MaterialController) GetMaterialBatchKCListByWhere() { where := " 1=1 " MaterialId := this.GetString("MaterialId") if MaterialId != "" { where = where + " and a.MaterialId = " + MaterialId } Category := this.GetString("Category") if Category != "" { where = where + " and b.Category = " + Category } StoreHouseId := this.GetString("StoreHouseId") if StoreHouseId != "" { where = where + " and a.StoreHouseId = " + StoreHouseId } BatchNo := this.GetString("BatchNo") if BatchNo != "" { where = where + " and a.BatchNo = '" + BatchNo + "' " } Name := this.GetString("Name") if Name != "" { where = where + " and (b.Name like '%" + Name + "%' or b.Symbol like '%" + Name + "%') " } Brand := this.GetString("Brand") if Brand != "" { where = where + " and b.Brand like '%" + Brand + "%' " } Supplier := this.GetString("Supplier") if Supplier != "" { where = where + " and b.Supplier like '%" + Supplier + "%' " } svc := material.GetMaterialService(utils.DBE) list := svc.GetMaterialBatchKCByWhere(this.User.AccCode+MaterialBatchKCName, this.User.AccCode+MaterialInfoName, "Id desc", where) var datainfo DataInfo datainfo.Items = list this.Data["json"] = &datainfo this.ServeJSON() } // @Title 根据出库单号,查询出库单详情 MaterialCKDetail // @Description get user by token // @Success 200 {object} models.Userblood // @router /getCKdetaillistbyCKNo/:CKNo [get] func (this *MaterialController) GetCKDetailListByCKNo() { page := this.GetPageInfoForm() CKNo := this.Ctx.Input.Param(":CKNo") where := " a.CKNo= '" + CKNo + "' " svc := material.GetMaterialService(utils.DBE) total, list := svc.GetPagingMaterialCKDetailByWhere(this.User.AccCode+MaterialCKDetailName, this.User.AccCode+MaterialInfoName, page.CurrentPage, page.Size, " a.CreateOn desc ", where) var datainfo DataInfo datainfo.Items = list datainfo.CurrentItemCount = total this.Data["json"] = &datainfo this.ServeJSON() } // @Title 出库单审核 MaterialCKHead // @Success 200 {object} controllers.Request // @router /auditorCKhead/:id [put] func (this *MaterialController) AuditorCKHeadById() { id := this.Ctx.Input.Param(":id") CKNo := this.GetString("CKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialCKHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) var entityempty material.MaterialCKHead svc := material.GetMaterialService(utils.DBE) //判断物料库存是否充足 where_CKNo := " a.CKNo='" + CKNo + "' " materialjudgment := svc.GetMaterialBatchKCCount(this.User.AccCode+MaterialCKDetailName, this.User.AccCode+MaterialBatchKCName, this.User.AccCode+MaterialInfoName, utils.ToStr(model.StoreHouseId), where_CKNo) if materialjudgment.MaterialName != "" { errinfo.Message = materialjudgment.MaterialName + ",库存不足" errinfo.Code = -3 this.Data["json"] = &errinfo this.ServeJSON() return } model.AuditorOn = time.Now() model.AuditorUserId, _ = utils.StrTo(this.User.Id).Int() model.AuditorBy = this.User.Realname model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "审核出库单" + CKNo var cols []string = []string{"StoreHouseId", "CKType", "CKTypeName", "CKPersionId", "CKPersion", "TotalPrice", "CKDate", "SaleNo", "ReceiveId", "ReceiveName", "ReceiveUserId", "ReceiveUserBy", "AuditorStatus", "AuditorOn", "AuditorUserId", "AuditorBy", "Remark", "ModifiedUserId", "ModifiedBy"} err := svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialCKHeadName, BaseOperationLogName, id, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { var ckhead material.MaterialCKHead svc.GetEntityByIdBytbl(this.User.AccCode+MaterialCKHeadName, id, &ckhead) if ckhead.CKType == 3 && ckhead.ReceiveId != 0 { //出库类型为调拨入库,生成入库信息并更改库存 this.MaterialYKOperation(CKNo, utils.ToStr(model.StoreHouseId), id) } else { this.SubMaterialBatchKC(CKNo, utils.ToStr(model.StoreHouseId)) } //删除库存为零的数据 _ = svc.DeleteEntityBytbl(this.User.AccCode+MaterialBatchKCName, "KCCount=0") } if err == nil { errinfo.Message = "审核成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "审核失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } //出库单审核通过后修改库存信息 MaterialBatchKC func (this *MaterialController) SubMaterialBatchKC(CKNo string, StoreHouseId string) { where_CKNo := " CKNo='" + CKNo + "' " var ckdetail []material.MaterialCKDetail svc := material.GetMaterialService(utils.DBE) //根据出库单号,获取出库详情表 MaterialCKDetail svc.GetEntitysByWhere(this.User.AccCode+MaterialCKDetailName, where_CKNo, &ckdetail) for i := 0; i < len(ckdetail); i++ { where_kcinfo := " StoreHouseId=" + StoreHouseId + " and MaterialId=" + utils.ToStr(ckdetail[i].MaterialId) + " and BatchNo='" + ckdetail[i].BatchNo + "' " svc.UpdatesubKCinfo(this.User.AccCode+MaterialBatchKCName, where_kcinfo, utils.ToStr(ckdetail[i].CKCount)) where_materialid := " Id=" + utils.ToStr(ckdetail[i].MaterialId) svc.UpdatesubKCinfo(this.User.AccCode+MaterialInfoName, where_materialid, utils.ToStr(ckdetail[i].CKCount)) } } //调拨出库,出库单审核后生成入库单信息,并修改库存 func (this *MaterialController) MaterialYKOperation(CKNo, StoreHouseId, CKId string) { svc := material.GetMaterialService(utils.DBE) var ckhead material.MaterialCKHead var storehouse materialstorehouse.MaterialStoreHouse //出库主信息 svc.GetEntityByIdBytbl(this.User.AccCode+MaterialCKHeadName, CKId, &ckhead) //出库仓库信息 svc.GetEntityByIdBytbl(this.User.AccCode+MaterialStoreHouseName, ckhead.StoreHouseId, &storehouse) where_CKNo := " CKNo='" + CKNo + "' " var ckdetail []material.MaterialCKDetail //根据出库单号,获取出库详情表 MaterialCKDetail svc.GetEntitysByWhere(this.User.AccCode+MaterialCKDetailName, where_CKNo, &ckdetail) //------生成入库主单信息------------ var rkhead material.MaterialRKHead rkhead.RKNo = utils.ToStr(GetRandomOrderNum()) rkhead.StoreHouseId = ckhead.ReceiveId rkhead.RKType = 3 rkhead.RKTypeName = "调拨入库" rkhead.TotalPrice = ckhead.TotalPrice rkhead.RKDate = time.Now() rkhead.RKPersionId = ckhead.CKPersionId rkhead.RKPersion = ckhead.CKPersion rkhead.SourceId = ckhead.StoreHouseId rkhead.SourceName = storehouse.Name rkhead.AuditorStatus = 1 rkhead.AuditorUserId, _ = utils.StrTo(this.User.Id).Int() rkhead.AuditorBy = this.User.Realname rkhead.Remark = "出库单号:" + CKNo rkhead.CreateBy = this.User.Realname rkhead.CreateUserId, _ = utils.StrTo(this.User.Id).Int() _, _ = svc.InsertEntityBytbl(this.User.AccCode+MaterialRKHeadName, &rkhead) //-----生成入库详情信息-------------- for i := 0; i < len(ckdetail); i++ { var kcinfo material.MaterialBatchKC var rkdetail material.MaterialRKDetail where_kcinfo := " StoreHouseId=" + StoreHouseId + " and MaterialId=" + utils.ToStr(ckdetail[i].MaterialId) + " and BatchNo='" + ckdetail[i].BatchNo + "' " svc.GetEntityByWhere(this.User.AccCode+MaterialBatchKCName, where_kcinfo, &kcinfo) rkdetail.RKNo = rkhead.RKNo rkdetail.MaterialId = ckdetail[i].MaterialId rkdetail.BatchNo = ckdetail[i].BatchNo rkdetail.RKCount = utils.ToStr(ckdetail[i].CKCount) rkdetail.Unit = ckdetail[i].Unit rkdetail.UnitPrice = ckdetail[i].UnitPrice rkdetail.TotalPrice = ckdetail[i].TotalPrice rkdetail.ProductDate = kcinfo.ProductDate rkdetail.ValidityDate = kcinfo.ValidityDate rkdetail.Remark = ckdetail[i].Remark rkdetail.CreateBy = this.User.Realname rkdetail.CreateUserId, _ = utils.StrTo(this.User.Id).Int() _, _ = svc.InsertEntityBytbl(this.User.AccCode+MaterialRKDetailName, &rkdetail) //执行出库操作 svc.UpdatesubKCinfo(this.User.AccCode+MaterialBatchKCName, where_kcinfo, utils.ToStr(ckdetail[i].CKCount)) } //---------执行入库------------ var rkdetails []material.MaterialRKDetail var batchkc material.MaterialBatchKC where_RKNo := " RKNo='" + rkhead.RKNo + "' " //根据入库单查询入库详情 svc.GetEntitysByWhere(this.User.AccCode+MaterialRKDetailName, where_RKNo, &rkdetails) for i := 0; i < len(rkdetails); i++ { where_BatchKC := " StoreHouseId=" + utils.ToStr(rkhead.StoreHouseId) + " and MaterialId=" + utils.ToStr(rkdetails[i].MaterialId) + " and BatchNo='" + rkdetails[i].BatchNo + "' " has := svc.GetEntityByWhere(this.User.AccCode+MaterialBatchKCName, where_BatchKC, &batchkc) if has { rkcount, _ := utils.StrTo(rkdetails[i].RKCount).Float32() batchkc.KCCount = batchkc.KCCount + rkcount batchkc.RKDate = rkhead.RKDate batchkc.ProductDate = rkdetails[i].ProductDate batchkc.ValidityDate = rkdetails[i].ValidityDate batchkc.Price = rkdetails[i].UnitPrice batchkc.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() batchkc.ModifiedBy = this.User.Realname var entityempty material.MaterialBatchKC opdesc := "新增库存" + rkdetails[i].BatchNo var cols []string = []string{"KCCount", "RKDate", "ProductDate", "ValidityDate", "Price", "ModifiedUserId", "ModifiedBy"} _ = svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialBatchKCName, BaseOperationLogName, batchkc.Id, &batchkc, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") } else { batchkc.StoreHouseId = rkhead.StoreHouseId batchkc.MaterialId = rkdetails[i].MaterialId batchkc.BatchNo = utils.ToStr(rkdetails[i].BatchNo) batchkc.KCCount, _ = utils.StrTo(rkdetails[i].RKCount).Float32() batchkc.RKDate = rkhead.RKDate batchkc.ProductDate = rkdetails[i].ProductDate batchkc.ValidityDate = rkdetails[i].ValidityDate batchkc.Price = rkdetails[i].UnitPrice batchkc.Remark = rkdetails[i].Remark batchkc.CreateBy = this.User.Realname batchkc.CreateUserId, _ = utils.StrTo(this.User.Id).Int() _, _ = svc.InsertEntityBytbl(this.User.AccCode+MaterialBatchKCName, &batchkc) } batchkc = material.MaterialBatchKC{} } var model material.MaterialCKHead var entityempty material.MaterialCKHead model.Remark = ckhead.Remark + " 入库单号:" + rkhead.RKNo model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "编辑出库单" + CKNo var cols []string = []string{"Remark", "ModifiedUserId", "ModifiedBy"} _ = svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialCKHeadName, BaseOperationLogName, CKId, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") } // @Title 出库单审核撤销 MaterialCKHead // @Success 200 {object} controllers.Request // @router /cancelCKhead/:id [put] func (this *MaterialController) CancelCKHeadById() { id := this.Ctx.Input.Param(":id") CKNo := this.GetString("CKNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialCKHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) var entityempty material.MaterialCKHead svc := material.GetMaterialService(utils.DBE) model.AuditorOn = time.Now() model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "撤销审核出库单" + CKNo var cols []string = []string{"AuditorStatus", "AuditorOn", "ModifiedUserId", "ModifiedBy"} err := svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialCKHeadName, BaseOperationLogName, id, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { if model.CKType == 3 && model.ReceiveId != 0 { //出库类型为调拨入库,生成入库信息并更改库存 this.CancelYKOperation(CKNo, utils.ToStr(model.StoreHouseId), id) } else { this.SubCancelBatchKC(CKNo, utils.ToStr(model.StoreHouseId), id) } //删除库存为零的数据 _ = svc.DeleteEntityBytbl(this.User.AccCode+MaterialBatchKCName, "KCCount=0") } if err == nil { errinfo.Message = "审核成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "审核失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } //调拨出库,出库单审核撤销后删除入库单信息,并修改库存 func (this *MaterialController) CancelYKOperation(CKNo, StoreHouseId, CKId string) { svc := material.GetMaterialService(utils.DBE) var ckhead material.MaterialCKHead //出库主信息 svc.GetEntityByIdBytbl(this.User.AccCode+MaterialCKHeadName, CKId, &ckhead) //根据出库单号,获取出库详情表 MaterialCKDetail var ckdetail []material.MaterialCKDetail where_CKNo := " CKNo='" + CKNo + "' " svc.GetEntitysByWhere(this.User.AccCode+MaterialCKDetailName, where_CKNo, &ckdetail) var rkhead []material.MaterialRKHead where_rk := "RKType = 3 and Remark like '%" + CKNo + "%'" svc.GetEntitysByWhere(this.User.AccCode+MaterialRKHeadName, where_rk, &rkhead) if len(rkhead) == 1 { var rkdetail []material.MaterialRKDetail where_rkdetail := "RKNo = " + rkhead[0].RKNo svc.GetEntitysByWhere(this.User.AccCode+MaterialRKDetailName, where_rkdetail, &rkdetail) fmt.Println("333333333333333333333", &rkdetail) //------删除入库主单信息------------ where_head := "Id = " + strconv.Itoa(rkhead[0].Id) svc.DeleteEntityBytbl(this.User.AccCode+MaterialRKHeadName, where_head) //-----删除入库详情信息-------------- for i := 0; i < len(rkdetail); i++ { where_detail := "Id = " + strconv.Itoa(rkdetail[i].Id) svc.DeleteEntityBytbl(this.User.AccCode+MaterialRKDetailName, where_detail) //撤销生成的入库单的新增库存 var batchkc material.MaterialBatchKC where_BatchRK := " StoreHouseId=" + strconv.Itoa(rkhead[0].StoreHouseId) + " and MaterialId=" + strconv.Itoa(rkdetail[i].MaterialId) + " and BatchNo='" + rkdetail[i].BatchNo + "' " svc.UpdatesubKCinfo(this.User.AccCode+MaterialBatchKCName, where_BatchRK, rkdetail[i].RKCount) //还原出库减少的库存 where_BatchCK := " StoreHouseId=" + StoreHouseId + " and MaterialId=" + strconv.Itoa(ckdetail[i].MaterialId) + " and BatchNo='" + ckdetail[i].BatchNo + "' " has := svc.GetEntityByWhere(this.User.AccCode+MaterialBatchKCName, where_BatchCK, &batchkc) fmt.Println("wwwwwwwwwwwwwwwww", &batchkc) if has { svc.UpdateaddKCinfo(this.User.AccCode+MaterialBatchKCName, where_BatchCK, utils.ToStr(ckdetail[i].CKCount)) } else { batchkc.StoreHouseId = ckhead.StoreHouseId batchkc.MaterialId = ckdetail[i].MaterialId batchkc.BatchNo = utils.ToStr(ckdetail[i].BatchNo) batchkc.KCCount = ckdetail[i].CKCount batchkc.RKDate = rkhead[0].RKDate batchkc.ProductDate = rkdetail[i].ProductDate batchkc.ValidityDate = rkdetail[i].ValidityDate batchkc.Price = ckdetail[i].UnitPrice batchkc.CreateBy = this.User.Realname batchkc.CreateUserId, _ = utils.StrTo(this.User.Id).Int() _, _ = svc.InsertEntityBytbl(this.User.AccCode+MaterialBatchKCName, &batchkc) } //删除库存为零的数据 _ = svc.DeleteEntityBytbl(this.User.AccCode+MaterialBatchKCName, "KCCount=0") } } } //撤销出库单审核后修改库存信息 MaterialBatchKC func (this *MaterialController) SubCancelBatchKC(CKNo, StoreHouseId, CKId string) { where_CKNo := " CKNo='" + CKNo + "' " var ckhead material.MaterialCKHead var ckdetail []material.MaterialCKDetail svc := material.GetMaterialService(utils.DBE) //根据出库单号,获取出库详情表 MaterialCKDetail svc.GetEntityByIdBytbl(this.User.AccCode+MaterialCKHeadName, CKId, &ckhead) svc.GetEntitysByWhere(this.User.AccCode+MaterialCKDetailName, where_CKNo, &ckdetail) for i := 0; i < len(ckdetail); i++ { where_materialid := " Id=" + utils.ToStr(ckdetail[i].MaterialId) svc.UpdateaddKCinfo(this.User.AccCode+MaterialInfoName, where_materialid, utils.ToStr(ckdetail[i].CKCount)) var batchkc material.MaterialBatchKC where_BatchKC := " StoreHouseId=" + StoreHouseId + " and MaterialId=" + utils.ToStr(ckdetail[i].MaterialId) + " and BatchNo='" + ckdetail[i].BatchNo + "' " has := svc.GetEntityByWhere(this.User.AccCode+MaterialBatchKCName, where_BatchKC, &batchkc) if has { svc.UpdateaddKCinfo(this.User.AccCode+MaterialBatchKCName, where_BatchKC, utils.ToStr(ckdetail[i].CKCount)) } else { batchkc.StoreHouseId, _ = utils.StrTo(StoreHouseId).Int() batchkc.MaterialId = ckdetail[i].MaterialId batchkc.BatchNo = utils.ToStr(ckdetail[i].BatchNo) batchkc.KCCount = ckdetail[i].CKCount batchkc.RKDate = ckhead.CKDate //batchkc.ProductDate = ckdetail[i].ProductDate //batchkc.ValidityDate = ckdetail[i].ValidityDate batchkc.Price = ckdetail[i].UnitPrice batchkc.CreateBy = this.User.Realname batchkc.CreateUserId, _ = utils.StrTo(this.User.Id).Int() _, _ = svc.InsertEntityBytbl(this.User.AccCode+MaterialBatchKCName, &batchkc) } } } // @Title 新增盘点单主信息 MaterialPDHead // @Description // @Success 200 {object} controllers.Request // @router /addmaterialPDhead [post] func (this *MaterialController) AddMaterialPDHead() { var model material.MaterialPDHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) model.CreateBy = this.User.Realname model.CreateUserId, _ = utils.StrTo(this.User.Id).Int() svc := material.GetMaterialService(utils.DBE) _, err := svc.InsertEntityBytbl(this.User.AccCode+MaterialPDHeadName, &model) var errinfo ErrorDataInfo if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 errinfo.Item = model.Id this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 盘点主信息列表 MaterialPDHead // @Description get user by token // @Success 200 {object} models.Userblood // @router /getPDheadlist [get] func (this *MaterialController) GetMaterialPDHeadList() { page := this.GetPageInfoForm() where := " 1=1 " orderby := "Id" asc := false Order := this.GetString("Order") Prop := this.GetString("Prop") if Order != "" && Prop != "" { orderby = Prop if orderby == "StoreHouseName" { orderby = "StoreHouseId" } if Order == "asc" { asc = true } } PDNo := this.GetString("PDNo") if PDNo != "" { where = where + " and PDNo like '%" + PDNo + "%' " } PDPersion := this.GetString("PDPersion") if PDPersion != "" { where = where + " and PDPersion like '%" + PDPersion + "%' " } PDDate := this.GetString("PDDate") if PDDate != "" { dates := strings.Split(PDDate, ",") if len(dates) == 2 { PDminDate := dates[0] PDmaxDate := dates[1] where = where + " and PDDate>='" + PDminDate + "' and PDDate<='" + PDmaxDate + "'" } } AuditorStatus := this.GetString("AuditorStatus") if AuditorStatus != "" { where = where + " and AuditorStatus=" + AuditorStatus + " " } StoreHouseId := this.GetString("StoreHouseId") if StoreHouseId != "" { where = where + " and StoreHouseId =" + StoreHouseId + " " } svc := material.GetMaterialService(utils.DBE) var list []material.MaterialPDHead total := svc.GetPagingEntitiesWithOrderBytbl(this.User.AccCode, page.CurrentPage, page.Size, orderby, asc, &list, where) var datainfo DataInfo datainfo.Items = list datainfo.CurrentItemCount = total this.Data["json"] = &datainfo this.ServeJSON() } // @Title 删除盘点主表信息 MaterialPDHead // @Description // @Success 200 {object} ErrorInfo // @Failure 403 :id 为空 // @router /deletematerialPDhead/:id [delete] func (this *MaterialController) MaterialPDHeadDelete() { id := this.Ctx.Input.Param(":id") PDNo := this.GetString("PDNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -0 this.Data["json"] = &errinfo this.ServeJSON() return } var entity material.MaterialPDHead var entityempty material.MaterialPDHead opdesc := "删除盘点单-" + PDNo svc := material.GetMaterialService(utils.DBE) err := svc.DeleteOperationAndWriteLogBytbl(this.User.AccCode+MaterialPDHeadName, BaseOperationLogName, id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { where := " PDNo=" + PDNo _ = svc.DeleteEntityBytbl(this.User.AccCode+MaterialPDDetailName, where) } if err == nil { errinfo.Message = "删除成功" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "删除失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 根据盘点单Id 查询盘点单主信息 MaterialPDHead // @Description get SampleType by token // @Success 200 // @router /getmaterialPDheaddetail/:id [get] func (this *MaterialController) GetMaterialPDHeadDetailById() { id := this.Ctx.Input.Param(":id") var model material.MaterialPDHead svc := material.GetMaterialService(utils.DBE) svc.GetEntityByIdBytbl(this.User.AccCode+MaterialPDHeadName, id, &model) var datainfo DataInfo datainfo.Items = model this.Data["json"] = &datainfo this.ServeJSON() } // @Title 编辑盘点主单信息 MaterialPDHead // @Success 200 {object} controllers.Request // @router /editmaterialPDhead/:id [put] func (this *MaterialController) EditMaterialPDHead() { id := this.Ctx.Input.Param(":id") PDNo := this.GetString("PDNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialPDHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) var entityempty material.MaterialPDHead svc := material.GetMaterialService(utils.DBE) model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "编辑盘点单" + PDNo var cols []string = []string{"PDDate", "StoreHouseId", "ShelfNo", "PDPersionId", "PDPersion", "Remark", "ModifiedUserId", "ModifiedBy"} err := svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialPDHeadName, BaseOperationLogName, id, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 新增盘点单详情,如果存在执行编辑操作 MaterialPDDetail // @Description // @Success 200 {object} controllers.Request // @router /addmaterialPDdetail [post] func (this *MaterialController) AddMaterialPDDetail() { var model material.MaterialPDDetail var entity material.MaterialPDDetail var jsonblob = this.Ctx.Input.RequestBody var err error json.Unmarshal(jsonblob, &model) svc := material.GetMaterialService(utils.DBE) where := " PDNo='" + model.PDNo + "' and MaterialId=" + utils.ToStr(model.MaterialId) + " and BatchNo='" + model.BatchNo + "' " svc.GetEntityByWhere(this.User.AccCode+MaterialPDDetailName, where, &entity) if entity.Id > 0 { model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname var cols []string = []string{"Unit", "KCCount", "RealKCCount", "DiffCount", "Remark", "ModifiedUserId", "ModifiedBy"} err = svc.UpdateSample(this.User.AccCode+MaterialPDDetailName, entity.Id, &model, cols) } else { model.CreateBy = this.User.Realname model.CreateUserId, _ = utils.StrTo(this.User.Id).Int() _, err = svc.InsertEntityBytbl(this.User.AccCode+MaterialPDDetailName, &model) } var errinfo ErrorDataInfo if err == nil { errinfo.Message = "保存成功!" errinfo.Code = 0 errinfo.Item = model.Id this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "保存失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 根据盘点单号,查询盘点单详情 MaterialPDDetail // @Description get user by token // @Success 200 {object} models.Userblood // @router /getpagingPDdetaillistbyPDNo/:PDNo [get] func (this *MaterialController) GetPagingPDDetailListByCKNo() { page := this.GetPageInfoForm() PDNo := this.Ctx.Input.Param(":PDNo") where := " a.PDNo='" + PDNo + "' " svc := material.GetMaterialService(utils.DBE) total, list := svc.GetPagingMaterialPDDetailByWhere(this.User.AccCode+MaterialPDDetailName, this.User.AccCode+MaterialInfoName, page.CurrentPage, page.Size, " a.Id desc ", where) var datainfo DataInfo datainfo.Items = list datainfo.CurrentItemCount = total this.Data["json"] = &datainfo this.ServeJSON() } // @Title 删除盘点单详情信息 MaterialPDDetail // @Description // @Success 200 {object} ErrorInfo // @Failure 403 :id 为空 // @router /deletematerialPDdetail/:id [delete] func (this *MaterialController) MaterialPDDetailDelete() { id := this.Ctx.Input.Param(":id") PDNo := this.GetString("PDNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var entity material.MaterialPDDetail var entityempty material.MaterialPDDetail opdesc := "删除盘点单详情-" + PDNo svc := material.GetMaterialService(utils.DBE) err := svc.DeleteOperationAndWriteLogBytbl(this.User.AccCode+MaterialPDDetailName, BaseOperationLogName, id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { errinfo.Message = "删除成功" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "删除失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } // @Title 查询盘点单库存列表 MaterialBatchKC // @Description get user by token // @Success 200 {object} models.Userblood // @router /materialKCandPDlist [get] func (this *MaterialController) MaterialKCAndPDlist() { page := this.GetPageInfoForm() PDNo := this.GetString("PDNo") where := " 1=1 " BatchNo := this.GetString("BatchNo") if BatchNo != "" { where = where + " and a.BatchNo like '%" + BatchNo + "%' " } Code := this.GetString("Code") if Code != "" { where = where + " and b.Code like '%" + Code + "%' " } Name := this.GetString("Name") if Name != "" { where = where + " and (b.Name like '%" + Name + "%' or b.Symbol like '%" + Name + "%') " } Category := this.GetString("Category") if Category != "" { where = where + " and b.Category= " + Category } Brand := this.GetString("Brand") if Brand != "" { where = where + " and b.Brand like '%" + Brand + "%' " } Supplier := this.GetString("Supplier") if Supplier != "" { where = where + " and b.Supplier like '%" + Supplier + "%' " } StoreHouseId := this.GetString("StoreHouseId") if StoreHouseId != "" { where = where + " and a.StoreHouseId =" + StoreHouseId + " " } svc := material.GetMaterialService(utils.DBE) total, list := svc.GetPagingMaterialKCAndPDinfoByWhere(this.User.AccCode+MaterialBatchKCName, this.User.AccCode+MaterialInfoName, this.User.AccCode+MaterialPDDetailName, page.CurrentPage, page.Size, " a.Id desc ", PDNo, where) var datainfo DataInfo datainfo.Items = list datainfo.CurrentItemCount = total this.Data["json"] = &datainfo this.ServeJSON() } // @Title 盘点单审核 MaterialPDHead // @Success 200 {object} controllers.Request // @router /auditorPDhead/:id [put] func (this *MaterialController) AuditorPDHeadById() { id := this.Ctx.Input.Param(":id") PDNo := this.GetString("PDNo") var errinfo ErrorInfo if id == "" { errinfo.Message = "操作失败!请求信息不完整" errinfo.Code = -2 this.Data["json"] = &errinfo this.ServeJSON() return } var model material.MaterialPDHead var jsonblob = this.Ctx.Input.RequestBody json.Unmarshal(jsonblob, &model) var entityempty material.MaterialPDHead svc := material.GetMaterialService(utils.DBE) model.AuditorOn = time.Now() model.AuditorUserId, _ = utils.StrTo(this.User.Id).Int() model.AuditorBy = this.User.Realname model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int() model.ModifiedBy = this.User.Realname opdesc := "审核盘点单-" + PDNo var cols []string = []string{"PDDate", "StoreHouseId", "ShelfNo", "PDPersionId", "PDPersion", "AuditorStatus", "AuditorOn", "AuditorUserId", "AuditorBy", "Remark", "ModifiedUserId", "ModifiedBy"} err := svc.UpdateOperationAndWriteLogBytbl(this.User.AccCode+MaterialPDHeadName, BaseOperationLogName, id, &model, &entityempty, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "物料管理") if err == nil { this.ChangeMaterialBatchKC(PDNo, utils.ToStr(model.StoreHouseId)) } if err == nil { errinfo.Message = "审核成功!" errinfo.Code = 0 this.Data["json"] = &errinfo this.ServeJSON() } else { errinfo.Message = "审核失败!" + utils.AlertProcess(err.Error()) errinfo.Code = -1 this.Data["json"] = &errinfo this.ServeJSON() } } //盘点单审核通过后,修改库存信息 MaterialBatchKC func (this *MaterialController) ChangeMaterialBatchKC(PDNo string, StoreHouseId string) { where_PDNo := " PDNo='" + PDNo + "' " var pddetail []material.MaterialPDDetail svc := material.GetMaterialService(utils.DBE) //根据出库单号,获取盘点详情表 MaterialPDDetail svc.GetEntitysByWhere(this.User.AccCode+MaterialPDDetailName, where_PDNo, &pddetail) for i := 0; i < len(pddetail); i++ { var kcinfo material.MaterialBatchKC where_pdinfo := " StoreHouseId=" + StoreHouseId + " and MaterialId=" + utils.ToStr(pddetail[i].MaterialId) + " and BatchNo='" + pddetail[i].BatchNo + "' " has := svc.GetEntityByWhere(this.User.AccCode+MaterialBatchKCName, where_pdinfo, &kcinfo) if has { kcinfo.KCCount = pddetail[i].RealKCCount var cols []string = []string{"KCCount"} _ = svc.UpdateSample(this.User.AccCode+MaterialBatchKCName, kcinfo.Id, &kcinfo, cols) where_materialid := " Id=" + utils.ToStr(pddetail[i].MaterialId) svc.UpdateaddKCinfo(this.User.AccCode+MaterialInfoName, where_materialid, utils.ToStr(pddetail[i].DiffCount)) } } } // @Title 获取入库月报 // @Description get user by token // @Success 200 {object} models.Userblood // @router /monthlyRKreport [get] func (this *MaterialController) MaterialMonthlyRKReport() { where := " 1=1 " RKDate := this.GetString("RKDate") if RKDate != "" { where = where + " and b.RKDate like '%" + RKDate + "%' " } StoreHouseId := this.GetString("StoreHouseId") if StoreHouseId != "" { where = where + " and b.StoreHouseId =" + StoreHouseId + " " } svc := material.GetMaterialService(utils.DBE) list := svc.MaterialRKMonthlyReport(this.User.AccCode, where) var datainfo DataInfo datainfo.Items = list this.Data["json"] = &datainfo this.ServeJSON() } // @Title 获取出库月报 // @Description get user by token // @Success 200 {object} models.Userblood // @router /monthlyCKreport [get] func (this *MaterialController) MaterialMonthlyCKReport() { where := " 1=1 " CKDate := this.GetString("CKDate") if CKDate != "" { where = where + " and b.CKDate like '%" + CKDate + "%' " } StoreHouseId := this.GetString("StoreHouseId") if StoreHouseId != "" { where = where + " and b.StoreHouseId =" + StoreHouseId + " " } svc := material.GetMaterialService(utils.DBE) list := svc.MaterialCKMonthlyReport(this.User.AccCode, where) var datainfo DataInfo datainfo.Items = list this.Data["json"] = &datainfo this.ServeJSON() } // @Title get 出入库月报导出到excel // @Description get SampleType by token // @Success 200 {object} sampletype.SampleType // @router /exportexcel [get] func (this *MaterialController) ExportExcel() { var filetitle string //文件名 var selecttime string //查询时间 ExportFlag := this.GetString("ExportFlag") svc := material.GetMaterialService(utils.DBE) where := "1=1" StoreHouseId := this.GetString("StoreHouseId") if StoreHouseId != "" { where = where + " and b.StoreHouseId =" + StoreHouseId + " " } var storehouse materialstorehouse.MaterialStoreHouse svc.GetEntityByIdBytbl(this.User.AccCode+MaterialStoreHouseName, StoreHouseId, &storehouse) var title []string titlestring := "编码,名称,批号,品牌,厂家,规格,数量,单位" f := xlsx.NewFile() var ckdatas []material.MaterialCKMonthlyReportModel var rkdatas []material.MaterialRKMonthlyReportModel title = strings.Split(titlestring, ",") if ExportFlag == "ckreport" { //出库 CKDate := this.GetString("CKDate") if CKDate != "" { where = where + " and b.CKDate like '%" + CKDate + "%' " } filetitle = storehouse.Name + "出库报表" selecttime = CKDate ckdatas = svc.MaterialCKMonthlyReport(this.User.AccCode, where) this.DaySaveXlsx(filetitle, title, "ckreport", ckdatas, f) } else if ExportFlag == "rkreport" { //入库 RKDate := this.GetString("RKDate") if RKDate != "" { where = where + " and b.RKDate like '%" + RKDate + "%' " } filetitle = storehouse.Name + "入库报表" selecttime = RKDate rkdatas = svc.MaterialRKMonthlyReport(this.User.AccCode, where) this.DaySaveXlsx(filetitle, title, "rkreport", rkdatas, f) } dir := "static/file/excel/report/" + this.GetAccode() SaveDirectory(dir) path := dir + "/" + selecttime + filetitle + ".xlsx" f.Save(path) this.Data["json"] = this.Ctx.Request.Host + "/" + path this.ServeJSON() } func (this *MaterialController) DaySaveXlsx(name string, title []string, exportflag string, datas interface{}, f *xlsx.File) { var ckdatas []material.MaterialCKMonthlyReportModel var rkdatas []material.MaterialRKMonthlyReportModel sheet, _ := f.AddSheet(name) rowhead := sheet.AddRow() rowhead.WriteSlice(&title, -1) if exportflag == "ckreport" { //出库 utils.AutoMap(&ckdatas, datas) for _, ckdata := range ckdatas { datastring := ckdata.Code + "," + ckdata.Name + "," + ckdata.BatchNo + "," + ckdata.Brand + "," + ckdata.Supplier + "," + ckdata.ProductSpec + "," + ckdata.Total + "," + ckdata.Unit cellname := strings.Split(datastring, ",") row := sheet.AddRow() row.WriteSlice(&cellname, -1) } } else if exportflag == "rkreport" { //入库 utils.AutoMap(&rkdatas, datas) for _, rkdata := range rkdatas { datastring := rkdata.Code + "," + rkdata.Name + "," + rkdata.BatchNo + "," + rkdata.Brand + "," + rkdata.Supplier + "," + rkdata.ProductSpec + "," + rkdata.Total + "," + rkdata.Unit cellname := strings.Split(datastring, ",") row := sheet.AddRow() row.WriteSlice(&cellname, -1) } } for c, cl := 0, len(sheet.Cols); c < cl; c++ { sheet.Cols[c].Width = 20 } }