123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601 |
- package admin
- import (
- "fmt"
- "net/http"
- "strconv"
- "strings"
- "time"
- "zhiyuan/models"
- "zhiyuan/models/raffle"
- "zhiyuan/pkg/app"
- "zhiyuan/pkg/config"
- "zhiyuan/pkg/db"
- "zhiyuan/pkg/errcode"
- adminParam "zhiyuan/pkg/param/admin"
- orderParam "zhiyuan/pkg/param/order"
- "zhiyuan/pkg/utils"
- "zhiyuan/services/admin"
- "zhiyuan/services/aftersale/order"
- "zhiyuan/services/dept"
- "zhiyuan/services/form"
- "zhiyuan/services/role"
- "github.com/gin-gonic/gin"
- "github.com/tealeg/xlsx/v3"
- )
- func Dashboard(c *gin.Context) {
- // 是否有缓存
- //cacheKey := "dashborad_data"
- //cacheData, err := redis.Get(cacheKey)
- //if err == nil {
- // app.Success(c, utils.JsonDecode(cacheData).ToMap())
- // return
- //}
- // 本月报修
- currentTime := time.Now()
- monthDate := utils.GetFirstDateOfMonth(currentTime).Unix()
- dayDate := utils.GetZeroTime(currentTime).Unix()
- orderBaseMap := map[string]interface{}{
- "deleted_at": 0,
- }
- eventBaseWhere := "o.deleted_at=0 AND e.event_type=1 AND e.created_at>" + utils.ToStr(dayDate)
- if adminInfo := admin.GetAdminCache(c.GetInt("adminID")); adminInfo.SiteID > 0 {
- orderBaseMap["site_id"] = adminInfo.SiteID
- eventBaseWhere = eventBaseWhere + " AND o.site_id=" + utils.ToStr(adminInfo.SiteID)
- }
- statisData := make(map[string]int64)
- statisData["month_num"], _ = order.Count(utils.MergeMap(map[string]interface{}{"created_at >": monthDate}, orderBaseMap))
- statisData["day_num"], _ = order.Count(utils.MergeMap(map[string]interface{}{"created_at >": dayDate}, orderBaseMap))
- statisData["day_repair_num"], _ = order.GetCountJoinOrder(eventBaseWhere+" AND order_state="+utils.ToStr(orderParam.State.Repaired.ID), nil)
- statisData["day_finish_num"], _ = order.GetCountJoinOrder(eventBaseWhere+" AND order_state="+utils.ToStr(orderParam.State.Confirmed.ID), nil)
- // 待办事项
- todoData := make(map[string]int64)
- // 待审核
- todoData["created"], _ = order.Count(utils.MergeMap(map[string]interface{}{"state": orderParam.State.Created.ID}, orderBaseMap))
- // 待分配
- todoData["checked"], _ = order.Count(utils.MergeMap(map[string]interface{}{"state": orderParam.State.Checked.ID}, orderBaseMap))
- // 待维修
- todoData["alloted"], _ = order.Count(utils.MergeMap(map[string]interface{}{"state": orderParam.State.Allotted.ID}, orderBaseMap))
- res := gin.H{
- "todo": todoData,
- "statis": statisData,
- }
- //redis.Set(cacheKey, res, 60)
- app.Success(c, res)
- }
- func Login(c *gin.Context) {
- var form form.AdminLogin
- if app.Bind(c, &form) != nil {
- return
- }
- token, err := admin.Login(form.Phone, form.Password)
- if err != nil {
- app.ErrorMsg(c, err.Error(), nil)
- return
- }
- app.Success(c, map[string]string{
- "token": token,
- })
- }
- func Info(c *gin.Context) {
- type SettingInfo struct {
- ImgHost string `json:"img_host"`
- }
- type AdminInfo struct {
- ID int `json:"id"`
- UserName string `json:"username"`
- RoleIds string `json:"role_ids"`
- ShopIds string `json:"shop_ids"`
- Auths []string `json:"auths"`
- Setting SettingInfo `json:"setting"`
- }
- var adminInfo *AdminInfo
- _, err := admin.GetInfoByID(c.GetInt("adminID"), []string{"id", "username", "shop_ids"}, &adminInfo)
- if adminInfo == nil {
- app.Response(c, http.StatusUnauthorized, errcode.TokenInvalid, nil)
- return
- }
- adminInfo.Auths, err = admin.GetAuth(adminInfo.ID)
- if err != nil {
- app.ErrorMsg(c, err.Error(), nil)
- return
- }
- adminInfo.Setting = SettingInfo{
- ImgHost: config.Cfg.App.ImgHost,
- }
- app.Success(c, adminInfo)
- }
- func Logout(c *gin.Context) {
- err := admin.Logout(c.GetInt("adminID"))
- if err != nil {
- app.ErrorMsg(c, err.Error(), nil)
- return
- }
- app.Success(c, nil)
- }
- func AdminAdd(c *gin.Context) {
- var addForm form.AdminAdd
- if app.Bind(c, &addForm) != nil {
- return
- }
- id, err := admin.Add(addForm)
- if err != nil {
- app.Error(c, err.Error())
- return
- }
- app.Success(c, gin.H{"id": id})
- }
- func AdminEdit(c *gin.Context) {
- id := utils.ToInt(c.Param("id"))
- if id <= 0 {
- app.ErrorMsg(c, "admin id must be a number", nil)
- return
- }
- var addForm form.AdminAdd
- if app.Bind(c, &addForm) != nil {
- return
- }
- err := admin.EditByID(addForm, id)
- if err != nil {
- app.ErrorMsg(c, err.Error(), nil)
- return
- }
- app.Success(c, nil)
- }
- func AdminEditState(c *gin.Context) {
- id := utils.ToInt(c.Param("id"))
- if id <= 0 {
- app.ErrorMsg(c, "admin id must be a number", nil)
- return
- }
- state := utils.ToInt(c.Param("state"))
- if state != 1 && state != -1 {
- app.ErrorMsg(c, "状态有误", nil)
- return
- }
- if err := admin.EditStateByID(id, state); err != nil {
- app.ErrorMsg(c, err.Error(), nil)
- return
- }
- app.Success(c, nil)
- }
- func AdminList(c *gin.Context) {
- isSelect := utils.ToInt(c.Query("is_select"))
- if isSelect == 1 {
- AdminListSelect(c)
- return
- }
- page := app.HandlePageNums(c)
- where := map[string]string{
- "where": "id>1 AND deleted_at=0",
- "_order_by": "id desc",
- }
- if page.PageSize != 0 {
- where["_page_size"] = utils.ToStr(page.PageSize)
- where["_page_num"] = utils.ToStr(page.PageNum)
- }
- param := make(map[string]interface{})
- // deptID
- deptID := utils.ToInt(c.Query("dept_id"))
- if deptID > 0 {
- where["where"] = where["where"] + " AND dept_id IN {{dept_id}}"
- param["dept_id"] = dept.GetSubDeptIds(deptID, []int{deptID})
- }
- // deptID
- ids := c.Query("ids")
- if ids != "" {
- Ids := make([]int, 0)
- for _, v := range strings.Split(ids, ",") {
- i, err := strconv.Atoi(v)
- if err == nil {
- Ids = append(Ids, i)
- }
- }
- where["where"] = where["where"] + " AND id IN {{ids}}"
- param["ids"] = Ids
- }
- // state
- state := utils.ToInt(c.Query("state"))
- if state != 0 {
- where["where"] = where["where"] + " AND state={{state}}"
- param["state"] = state
- }
- roleId := c.Query("role_id")
- if roleId != "" {
- where["where"] = where["where"] + " AND FIND_IN_SET({{role_id}}, role_ids)"
- param["role_id"] = roleId
- }
- shopId := c.Query("shop_id")
- if shopId != "" {
- where["where"] = where["where"] + " AND FIND_IN_SET({{shop_id}}, shop_ids)"
- param["shop_id"] = shopId
- }
- // user
- user := c.Query("user")
- if user != "" {
- where["where"] = where["where"] + " AND (username LIKE {{user}} OR phone LIKE {{user}})"
- param["user"] = "%" + user + "%"
- }
- total, err := admin.CountRaw(where["where"], param)
- if err != nil {
- app.Error(c, err.Error())
- return
- }
- type AdminList struct {
- ID int `json:"id"`
- UserName string `json:"username"`
- Phone string `json:"phone"`
- RoleIds string `json:"role_ids"`
- RoleNames string `json:"role_names"`
- DeptID int `json:"dept_id"`
- DeptName string `json:"dept_name"`
- Headimgurl string `json:"headimgurl"`
- Nickname string `json:"nickname"`
- SiteID int `json:"site_id"`
- State int `json:"state"`
- StateName string `json:"state_name"`
- StateColor string `json:"state_color"`
- AccountName string `json:"account_name"`
- AccountBank string `json:"account_bank"`
- AccountNo string `json:"account_no"`
- CreatedAt string `json:"created_at"`
- ShopIds string `json:"shop_ids"`
- EntryDate int `json:"entry_date"`
- RestDay string `json:"rest_day"`
- LogIds string `json:"log_ids"`
- }
- adminList := make([]AdminList, 0)
- if _, err = admin.GetAdminsRaw(where, param, &adminList); err != nil {
- app.Error(c, err.Error())
- return
- }
- adminIds := make([]int, 0)
- for _, v := range adminList {
- adminIds = append(adminIds, v.ID)
- }
- roleListMap := make(map[int]string)
- if roleList, err := role.GetList(nil, []string{"id, name"}, app.Page{}, nil); err == nil {
- for _, v := range roleList {
- roleListMap[v.ID] = v.Name
- }
- }
- stateMap := adminParam.GetStateMap()
- for k, v := range adminList {
- roleNames := ""
- roleSlice := strings.Split(v.RoleIds, ",")
- for _, vv := range roleSlice {
- roleNames += "," + roleListMap[utils.ToInt(vv)]
- }
- if stateObj, ok := stateMap[v.State]; ok {
- v.StateName = stateObj.Name
- v.StateColor = stateObj.Color
- }
- v.RoleNames = strings.TrimLeft(roleNames, ",")
- v.DeptName = dept.GetDeptFullName(v.DeptID, "-")
- v.CreatedAt = utils.DateS(v.CreatedAt, "YYYY-MM-DD HH:mm")
- adminList[k] = v
- }
- data := gin.H{
- "list": adminList,
- "total": total,
- "limit": page.PageSize,
- }
- app.Success(c, data)
- }
- func AdminExport(c *gin.Context) {
- wb := xlsx.NewFile()
- time := utils.ToStr(time.Now().UnixNano())
- filename := "员工信息-" + time + ".xlsx"
- fullPath := config.Cfg.App.ExportPath + filename
- sh, err := wb.AddSheet("Sheet1")
- if err != nil {
- app.Error(c, err.Error())
- return
- }
- sh.SetColWidth(1, 1, 20)
- sh.SetColWidth(2, 2, 30)
- sh.SetColWidth(3, 3, 20)
- var row *xlsx.Row
- var cell *xlsx.Cell
- rowHeader := sh.AddRow()
- rowHeader.SetHeight(48)
- cell = rowHeader.AddCell()
- cell.Value = "名称"
- cell = rowHeader.AddCell()
- cell.Value = "活动链接"
- adminList, err := admin.GetAdmins(map[string]interface{}{"deleted_at": 0}, nil, app.Page{}, nil)
- for _, v := range adminList {
- row = sh.AddRow()
- row.SetHeight(30)
- cell = row.AddCell()
- cell.Value = v.Username
- cell = row.AddCell()
- cell.Value = "https://jz.nczyzs.com/activity/one#?ref_id=" + utils.ToStr(v.ID)
- }
- if err := wb.Save(fullPath); err != nil {
- app.Error(c, err.Error())
- return
- }
- app.Success(c, gin.H{"path": "export/" + filename, "filename": filename})
- }
- func AdminListSelect(c *gin.Context) {
- type AdminList struct {
- ID int `json:"id"`
- UserName string `json:"username"`
- }
- adminList := make([]AdminList, 0)
- where := map[string]string{
- "where": "id>1",
- "_order_by": "id desc",
- }
- if c.Query("show_all") == "" {
- where["where"] = where["where"] + " AND deleted_at=0"
- }
- if c.Query("limit") != "" {
- page := app.HandlePageNum(c)
- where["_page_size"] = utils.ToStr(page.PageSize)
- where["_page_num"] = utils.ToStr(page.PageNum)
- }
- param := make(map[string]interface{})
- // site_id
- //if adminInfo := admin.GetAdminCache(c.GetInt("adminID")); adminInfo.SiteID > 0 {
- // where["where"] += " AND (site_id={{site_id}} or site_id=0)"
- // param["site_id"] = adminInfo.SiteID
- //}
- username := c.Query("username")
- if username != "" {
- where["where"] = where["where"] + " AND username LIKE {{username}}"
- param["username"] = "%" + username + "%"
- }
- adminIds := c.Query("admin_ids")
- if adminIds != "" {
- where["where"] = where["where"] + " AND id IN {{ids}}"
- param["ids"] = strings.Split(adminIds, ",")
- }
- roleId := c.Query("role_id")
- if roleId != "" {
- where["where"] = where["where"] + " AND FIND_IN_SET({{role_id}}, role_ids)"
- param["role_id"] = roleId
- }
- if _, err := admin.GetAdminsRaw(where, param, &adminList); err != nil {
- app.Error(c, err.Error())
- }
- app.Success(c, adminList)
- }
- func AdminDel(c *gin.Context) {
- id := utils.ToInt(c.Param("id"))
- if id <= 0 {
- app.ErrorMsg(c, "admin id must be a number", nil)
- return
- }
- err := admin.DeleteByID(id)
- if err != nil {
- app.Error(c, err.Error())
- return
- }
- app.Success(c, nil)
- }
- func AdminInfo(c *gin.Context) {
- id := utils.StrTo(c.Param("id")).MustInt()
- if id <= 0 {
- app.ErrorMsg(c, "department id must be a number", nil)
- return
- }
- type AdminInfo struct {
- ID int `json:"id"`
- UserName string `json:"username"`
- Phone string `json:"phone"`
- RoleIds string `json:"role_ids"`
- DeptID int `json:"dept_id"`
- SiteID int `json:"site_id"`
- State int `json:"state"`
- CreatedAt string `json:"created_at"`
- }
- var admininfo AdminInfo
- _, err := admin.GetInfoByID(id, nil, &admininfo)
- if err != nil {
- app.Error(c, err.Error())
- return
- }
- app.Success(c, admininfo)
- }
- func SalesmanAdd(c *gin.Context) {
- var addForm form.SalesmanAdd
- if app.Bind(c, &addForm) != nil {
- return
- }
- id, err := admin.AddSalesman(addForm)
- if err != nil {
- app.Error(c, err.Error())
- return
- }
- app.Success(c, gin.H{"id": id})
- }
- func Password(c *gin.Context) {
- var form form.Password
- if app.Bind(c, &form) != nil {
- return
- }
- if err := admin.Password(c.GetInt("adminID"), form); err != nil {
- app.ErrorMsg(c, err.Error(), nil)
- return
- }
- app.Success(c, nil)
- }
- func GetRaffleInfo(c *gin.Context) {
- id := utils.StrTo(c.Param("id")).MustInt()
- if id <= 0 {
- app.ErrorMsg(c, "抽奖id有误", nil)
- return
- }
- var raffles *raffle.Raffle
- db.GetModel(map[string]interface{}{
- "id": id,
- "deleted_at": 0,
- }, &raffles)
- if raffles == nil || raffles.DeletedAt != 0 {
- app.ErrorMsg(c, "抽奖活动不存在", nil)
- return
- }
- raffleItems := make([]raffle.RaffleItem, 0)
- db.GetModel(map[string]interface{}{
- "raffle_id": raffles.ID,
- "deleted_at": 0,
- }, &raffleItems)
- items := make([]gin.H, 0)
- itemMap := map[int64]raffle.RaffleItem{}
- for _, item := range raffleItems {
- items = append(items, gin.H{
- "id": item.ID,
- "name": item.Name,
- "picture": item.Picture,
- "weight": item.Weight,
- "winning": item.Winning,
- })
- itemMap[item.ID] = item
- }
- ret := gin.H{
- "state": 0,
- "items": items,
- "raffle": gin.H{
- "name": raffles.Name,
- },
- }
- app.Success(c, ret)
- }
- func WorkArrangeItemImport(c *gin.Context) {
- file, err := c.FormFile("file")
- if err != nil {
- app.Error(c, fmt.Sprintf("get form err: %s", err.Error()))
- return
- }
- fileExt := utils.FileExt(file.Filename)
- attachKey := utils.RandomStr() + fileExt
- file.Filename = "data/" + attachKey
- if err := c.SaveUploadedFile(file, file.Filename); err != nil {
- app.Error(c, fmt.Sprintf("上传文件失败%s", err.Error()))
- return
- }
- wb, err := xlsx.OpenFile(file.Filename)
- if err != nil {
- app.Error(c, err.Error())
- return
- }
- arrangeId, _ := db.ToInt64(c.PostForm("arrange_id"))
- if arrangeId <= 0 {
- app.ErrorMsg(c, "导入错误", nil)
- return
- }
- for _, sh := range wb.Sheet {
- datas := make([]map[string]interface{}, 0)
- headers := make([]string, 0)
- err := sh.ForEachRow(func(r *xlsx.Row) error {
- if r.GetCoordinate() <= 0 {
- err := r.ForEachCell(func(c *xlsx.Cell) error {
- headers = append(headers, c.String())
- return nil
- })
- if err != nil {
- return err
- }
- } else {
- var data models.WorkArrangeItem
- for i, header := range headers {
- value := r.GetCell(i).String()
- switch header {
- case "天数":
- data.Day, _ = db.ToInt64(value)
- case "时间":
- if value == "下午" {
- data.Type = 1
- }
- case "内容":
- data.Content = value
- case "培训老师":
- data.Teacher = value
- case "考核内容":
- data.Examine = value
- default:
- }
- }
- if data.Day < 0 || data.Content == "" && data.Teacher == "" && data.Examine == "" {
- return nil
- }
- var item models.WorkArrangeItem
- db.GetModel(map[string]interface{}{
- "arrange_id": arrangeId,
- "day": data.Day,
- "type": data.Type,
- "deleted_at": 0,
- }, &item)
- da := map[string]interface{}{
- "arrange_id": arrangeId,
- "day": data.Day,
- "type": data.Type,
- "content": data.Content,
- "teacher": data.Teacher,
- "examine": data.Examine,
- }
- if item.ID == 0 {
- datas = append(datas, da)
- } else {
- err := db.UpdateModel(db.Type(item), item.ID, da)
- if err != nil {
- return err
- }
- }
- }
- return nil
- })
- if err != nil {
- app.Error(c, err.Error())
- return
- }
- db.InsertModels(db.Type(models.WorkArrangeItem{}), datas)
- }
- app.Success(c, nil)
- }
|