package controllers import ( "ERP_storage/conf" "ERP_storage/logs" "ERP_storage/models/Account" "ERP_storage/models/Basic" "ERP_storage/models/Stock" "ERP_storage/models/validationtool" "encoding/json" "errors" "fmt" "github.com/beego/beego/v2/adapter/orm" beego "github.com/beego/beego/v2/server/web" "github.com/xuri/excelize/v2" userlibs "gogs.baozhida.cn/zoie/ERP_libs/User" "gogs.baozhida.cn/zoie/ERP_libs/lib" "math" "net/url" "os" "strconv" "strings" "time" ) type ValidationController struct { beego.Controller User userlibs.User } func (c *ValidationController) Prepare() { c.User = *Account.User_r } // AddValidation 查询设备是否存在在库存中,如果存在则修改设备状态为待使用,否则直接添加设备 func (c *ValidationController) AddValidation() { var ValidationList []validationtool.AddValidationTool err := json.Unmarshal(c.Ctx.Input.RequestBody, &ValidationList) if err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil} c.ServeJSON() return } vali := validationtool.NewValidationTool(orm.NewOrm()) for _, tool := range ValidationList { if len(tool.T_sn) <= 0 { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil} c.ServeJSON() return } r, err := vali.ReadValidationBytSn(tool.T_sn) if err != nil { if errors.Is(err, orm.ErrNoRows) { var validataiontool validationtool.ValidationTool atoi, _ := strconv.Atoi(tool.T_class) user := Stock.Read_MqttUser(tool.T_sn) validataiontool.T_iccid = user.Iccid validataiontool.T_imei = user.Imei validataiontool.T_uuid = c.User.T_uuid validataiontool.Validationnumber = tool.Validationnumber validataiontool.T_sn = tool.T_sn validataiontool.T_remark = tool.T_remark validataiontool.T_state = 2 validataiontool.T_class = atoi _, err := vali.ADDValidationTool(validataiontool) if err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil} c.ServeJSON() return } } } else { //修改设备 con := make(map[string]string) if len(tool.Validationnumber) != 0 { con["validationnumber"] = tool.Validationnumber } if r.T_state != 2 { con["t_state"] = "2" // 待使用 } con["t_remark"] = tool.T_remark con["t_project"] = "" con["lend_user"] = "" err = vali.UpdateValidationTool(r.T_sn, con) if err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil} c.ServeJSON() return } } } c.Data["json"] = lib.JSONS{Code: 200, Msg: "入库成功!", Data: nil} c.ServeJSON() return } func (c *ValidationController) ValidationList() { // 分页参数 初始化 page, _ := c.GetInt("page") if page < 1 { page = 1 } page_z, _ := c.GetInt("page_z") if page_z < 1 { page_z = conf.Page_size } T_state := c.GetString("T_state") validationnumber := c.GetString("validationnumber") T_sn := c.GetString("T_sn") t_iccid := c.GetString("t_iccid") t_imei := c.GetString("t_imei") LendUser := c.GetString("LendUser") T_project := c.GetString("T_project") T_class := c.GetString("T_class") vali := validationtool.NewValidationTool(orm.NewOrm()) R_List, R_cnt := vali.Read_Validation_List(validationnumber, T_sn, t_iccid, t_imei, T_state, LendUser, T_project, T_class, page, page_z) var r_jsons lib.R_JSONS r_jsons.Num = R_cnt r_jsons.Data = R_List r_jsons.Page = page r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z))) c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons} c.ServeJSON() return } func (c *ValidationController) DeleteValidationTool() { id := c.GetString("t_sn") if len(id) <= 0 { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "t_sn不能为空!", Data: nil} c.ServeJSON() return } vali := validationtool.NewValidationTool(orm.NewOrm()) err := vali.DeleteValidationTool(id) if err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "删除失败!", Data: nil} c.ServeJSON() return } c.Data["json"] = lib.JSONS{Code: 200, Msg: "删除成功!", Data: nil} c.ServeJSON() } func (c *ValidationController) UpdateValidationTool() { var lendValidationList []validationtool.LendValidationTool err := json.Unmarshal(c.Ctx.Input.RequestBody, &lendValidationList) if err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil} c.ServeJSON() return } vali := validationtool.NewValidationTool(orm.NewOrm()) for _, tool := range lendValidationList { if len(tool.T_sn) <= 0 { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil} c.ServeJSON() return } r, err := vali.ReadValidationBytSn(tool.T_sn) sprintf := fmt.Sprintf("当前sn:%v 未入库", tool.T_sn) if err != nil || r.T_state != 2 { c.Data["json"] = lib.JSONS{Code: 1201, Msg: sprintf, Data: nil} c.ServeJSON() return } //修改设备状态 con := make(map[string]string) if len(tool.T_remark) != 0 { con["t_remark"] = tool.T_remark } if len(tool.Validationnumber) != 0 { con["validationnumber"] = tool.Validationnumber } con["t_state"] = "1" if len(tool.LendUser) != 0 { con["lend_user"] = tool.LendUser } if len(tool.T_project) != 0 { con["t_project"] = tool.T_project } err = vali.UpdateValidationTool(tool.T_sn, con) if err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil} c.ServeJSON() return } } c.Data["json"] = lib.JSONS{Code: 200, Msg: "修改成功!", Data: nil} c.ServeJSON() return } // GetValidationToolBySn 根据sn获取设备信息 func (c *ValidationController) GetValidationToolBySn() { sn := c.GetString("sn") if len(sn) <= 0 { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "sn不能为空!", Data: nil} c.ServeJSON() return } vali := validationtool.NewValidationTool(orm.NewOrm()) r, err := vali.ReadValidationBytSn(sn) if err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "当前设备不存在!", Data: nil} c.ServeJSON() return } c.Data["json"] = lib.JSONS{Code: 200, Msg: "成功!", Data: r} c.ServeJSON() } // UpdateValidationToolBySn 根据sn修改设备信息 func (c *ValidationController) UpdateValidationToolBySn() { sn := c.GetString("T_sn") Id := c.GetString("Id") Validationnumber := c.GetString("Validationnumber") T_remark := c.GetString("T_remark") T_state := c.GetString("T_state") T_class := c.GetString("T_class") if len(sn) <= 0 { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "sn不能为空!", Data: nil} c.ServeJSON() return } if len(Id) <= 0 { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "Id不能为空!", Data: nil} c.ServeJSON() return } con := make(map[string]string) if len(Validationnumber) > 0 { con["validationnumber"] = Validationnumber } if len(T_remark) > 0 { con["t_remark"] = T_remark } if len(T_state) > 0 { con["t_state"] = T_state } if len(T_class) > 0 { con["t_class"] = T_class } vali := validationtool.NewValidationTool(orm.NewOrm()) r, err := vali.ReadValidationById(Id) if !strings.EqualFold(r.T_sn, sn) { con["t_sn"] = sn user := Stock.Read_MqttUser(sn) con["t_iccid"] = user.Iccid con["t_imei"] = user.Imei } err = vali.UpdateValidationToolById(Id, con) if err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "当前设备不存在!", Data: nil} c.ServeJSON() return } c.Data["json"] = lib.JSONS{Code: 200, Msg: "成功!", Data: nil} c.ServeJSON() } func (c *ValidationController) ImportExecl() { // 获取上传的文件 vali := validationtool.NewValidationTool(orm.NewOrm()) f, _, err := c.GetFile("excelFile") if err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "读取文件失败!", Data: nil} c.ServeJSON() return } defer f.Close() // 读取 Excel 文件 reader, err := excelize.OpenReader(f) if err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "打开文件失败!", Data: nil} c.ServeJSON() return } defer func() { if err := reader.Close(); err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "关闭文件失败!", Data: nil} c.ServeJSON() return } }() // 读取工作表中的数据 rows, err := reader.GetRows("Sheet1") if err != nil { c.Data["json"] = lib.JSONS{Code: 1201, Msg: "读取文件失败!", Data: nil} c.ServeJSON() return } for i, row := range rows { if i == 0 { continue // 忽略第一排 } if len(row) >= 4 { atoi, _ := strconv.Atoi(row[2]) isout, _ := strconv.Atoi(row[3]) user := Stock.Read_MqttUser(row[0]) tool := validationtool.ValidationTool{ T_sn: row[0], T_class: atoi, Validationnumber: row[1], T_uuid: c.User.T_uuid, T_state: isout, T_iccid: user.Iccid, T_imei: user.Imei, } _, err := vali.ADDValidationTool(tool) if err != nil { sprintf := fmt.Sprintf("设备sn添加失败%v", row[0]) c.Data["json"] = lib.JSONS{Code: 1201, Msg: sprintf, Data: nil} c.ServeJSON() return } } } c.Data["json"] = lib.JSONS{Code: 200, Msg: "成功!", Data: nil} c.ServeJSON() } func (c *ValidationController) ExportValidationListExecl() { // 分页参数 初始化 page, _ := c.GetInt("page") if page < 1 { page = 1 } page_z, _ := c.GetInt("page_z") if page_z < 1 { page_z = 9999 } T_state := c.GetString("T_state") validationnumber := c.GetString("validationnumber") T_sn := c.GetString("T_sn") t_iccid := c.GetString("t_iccid") t_imei := c.GetString("t_imei") LendUser := c.GetString("LendUser") T_project := c.GetString("T_project") T_class := c.GetString("T_class") vali := validationtool.NewValidationTool(orm.NewOrm()) R_List, _ := vali.Read_Validation_List(validationnumber, T_sn, t_iccid, t_imei, T_state, LendUser, T_project, T_class, page, page_z) f := excelize.NewFile() //设置单元格值 // 这里设置表头ÒÒ f.SetCellValue("Sheet1", "A1", "序号") f.SetCellValue("Sheet1", "B1", "SN") f.SetCellValue("Sheet1", "C1", "编号") f.SetCellValue("Sheet1", "D1", "模组imei") f.SetCellValue("Sheet1", "E1", "物联网卡号") f.SetCellValue("Sheet1", "F1", "设备类型") f.SetCellValue("Sheet1", "G1", "借出人") f.SetCellValue("Sheet1", "H1", "借出项目") f.SetCellValue("Sheet1", "I1", "备注") // 设置列宽 f.SetColWidth("Sheet1", "A", "A", 6) f.SetColWidth("Sheet1", "B", "B", 20) f.SetColWidth("Sheet1", "C", "C", 15) f.SetColWidth("Sheet1", "D", "D", 15) f.SetColWidth("Sheet1", "E", "E", 30) f.SetColWidth("Sheet1", "F", "F", 15) f.SetColWidth("Sheet1", "G", "G", 15) f.SetColWidth("Sheet1", "H", "H", 30) f.SetColWidth("Sheet1", "I", "J", 15) line := 1 for i, v := range R_List { line++ r, _ := Basic.Read_ProductClass_ById(v.T_class) f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), i+1) f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_sn) f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.Validationnumber) f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_imei) f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_iccid) f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), r.T_name) f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.LendUser) f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), v.T_project) f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v.T_remark) } timeStr := time.Now().Format("20060102150405") fileName := fmt.Sprintf("验证工具记录表%v.xlsx", timeStr) filePath := "ofile/" + "验证工具记录表" + timeStr + ".xlsx" // 保存文件 if err := f.SaveAs(filePath); err != nil { logs.Error("文件失败:", err) } defer func() { os.Remove(filePath) }() c.Ctx.Output.Header("Content-Type", "application/vnd.ms-excel;charset=utf8") c.Ctx.Output.Header("Content-Disposition", "attachment; filename="+url.PathEscape(fileName)) c.Ctx.Output.Header("Content-Transfer-Encoding", "binary") c.Ctx.Output.Download(filePath, fileName) }