Explorar el Código

新增 仪表盘 费用图标

xuwenhao hace 1 año
padre
commit
de72fd029d

+ 2 - 0
server/api/v1/admin/enter.go

@@ -8,6 +8,7 @@ type ApiGroup struct {
 	FileApi
 	FinanceApi
 	ConstructorApi
+	ExpensesApi
 }
 
 var (
@@ -16,4 +17,5 @@ var (
 	fileService        = service.ServiceGroupApp.AdminServiceGroup.FileService
 	financeService     = service.ServiceGroupApp.AdminServiceGroup.FinanceService
 	constructorService = service.ServiceGroupApp.AdminServiceGroup.ConstructorService
+	expensesService    = service.ServiceGroupApp.AdminServiceGroup.ExpensesService
 )

+ 116 - 0
server/api/v1/admin/expenses.go

@@ -0,0 +1,116 @@
+package admin
+
+import (
+	"github.com/gin-gonic/gin"
+	"server/dao"
+	"server/global"
+	"server/model/common/request"
+	"server/model/common/response"
+)
+
+type ExpensesApi struct{}
+
+func (ea *ExpensesApi) QueryExpensesList(c *gin.Context) {
+	var info request.SearchExpenses
+	err := c.ShouldBindJSON(&info)
+	if err != nil {
+		response.FailWithMessage("失败", c)
+		global.GVA_LOG.Error("QueryExpensesList ====== " + err.Error())
+		return
+	}
+	list, total, err := expensesService.QueryExpensesList(info)
+	if err != nil {
+		response.FailWithMessage("失败", c)
+		global.GVA_LOG.Error("QueryExpensesList ====== " + err.Error())
+		return
+	}
+	response.OkWithDetailed(response.PageResult{
+		List:     list,
+		Total:    total,
+		Page:     info.PageInfo.Page,
+		PageSize: info.PageInfo.PageSize,
+	}, "获取成功", c)
+}
+
+func (ea *ExpensesApi) QueryExpensesSumByPeople(c *gin.Context) {
+	var info request.SearchExpenses
+	err := c.ShouldBindJSON(&info)
+	if err != nil {
+		response.FailWithMessage("失败", c)
+		global.GVA_LOG.Error("QueryExpensesSumByPeople ====== " + err.Error())
+		return
+	}
+	list, total, err := expensesService.QueryExpensesSumByPeople(info)
+	if err != nil {
+		response.FailWithMessage("失败", c)
+		global.GVA_LOG.Error("QueryExpensesSumByPeople ====== " + err.Error())
+		return
+	}
+	response.OkWithDetailed(response.PageResult{
+		List:     list,
+		Total:    total,
+		Page:     info.PageInfo.Page,
+		PageSize: info.PageInfo.PageSize,
+	}, "获取成功", c)
+}
+
+func (ea *ExpensesApi) QuerySurplus(c *gin.Context) {
+	surplus, err := expensesService.QuerySurplus()
+	if err != nil {
+		response.FailWithMessage("失败", c)
+		global.GVA_LOG.Error("QuerySurplus ====== " + err.Error())
+		return
+	}
+	response.OkWithData(surplus, c)
+}
+
+func (ea *ExpensesApi) CreateExpenses(c *gin.Context) {
+	var expenses dao.Expenses
+	err := c.ShouldBindJSON(&expenses)
+	if err != nil {
+		response.FailWithMessage("失败", c)
+		global.GVA_LOG.Error("CreateExpense ====== " + err.Error())
+		return
+	}
+	err = expensesService.CreateExpenses(expenses)
+	if err != nil {
+		response.FailWithMessage("失败", c)
+		global.GVA_LOG.Error("CreateExpense ====== " + err.Error())
+		return
+	}
+	response.OkWithMessage("新增成功", c)
+}
+
+func (ea *ExpensesApi) UpdateExpenses(c *gin.Context) {
+	var expenses dao.Expenses
+	err := c.ShouldBindJSON(&expenses)
+	if err != nil {
+		response.FailWithMessage("失败", c)
+		global.GVA_LOG.Error("UpdateExpenses ====== " + err.Error())
+		return
+	}
+	err = expensesService.UpdateExpenses(expenses)
+	if err != nil {
+		response.FailWithMessage("失败", c)
+		global.GVA_LOG.Error("UpdateExpenses ====== " + err.Error())
+		return
+	}
+	response.OkWithMessage("修改成功", c)
+}
+
+func (ea *ExpensesApi) DeleteExpenses(c *gin.Context) {
+	var expenses dao.Expenses
+	err := c.ShouldBindJSON(&expenses)
+	if err != nil {
+		response.FailWithMessage("失败", c)
+		global.GVA_LOG.Error("DeleteExpenses ====== " + err.Error())
+		return
+	}
+	err = expensesService.DeleteExpenses(expenses)
+	if err != nil {
+		response.FailWithMessage("失败", c)
+		global.GVA_LOG.Error("DeleteExpenses ====== " + err.Error())
+		return
+	}
+	response.OkWithMessage("修改成功", c)
+}

+ 2 - 2
server/api/v1/admin/finance.go

@@ -13,7 +13,7 @@ import (
 type FinanceApi struct{}
 
 func (fa *FinanceApi) QueryDailyExpensesList(c *gin.Context) {
-	var info request.SearchProject
+	var info request.SearchDailyFee
 	err := c.ShouldBindJSON(&info)
 	if err != nil {
 		response.FailWithMessage("失败", c)
@@ -66,7 +66,7 @@ func (fa *FinanceApi) QueryExpensesGenre(c *gin.Context) {
 }
 
 func (fa *FinanceApi) QueryBorrowingList(c *gin.Context) {
-	var info request.SearchProject
+	var info request.SearchNameTime
 	err := c.ShouldBindJSON(&info)
 	if err != nil {
 		response.FailWithMessage("失败", c)

+ 8 - 5
server/api/v1/system/sys_user.go

@@ -1,6 +1,7 @@
 package system
 
 import (
+	"fmt"
 	"server/dao"
 	"strconv"
 	"time"
@@ -360,11 +361,12 @@ func (b *BaseApi) SetUserInfo(c *gin.Context) {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
-	err = utils.Verify(user, utils.IdVerify)
-	if err != nil {
-		response.FailWithMessage(err.Error(), c)
-		return
-	}
+	fmt.Println(user)
+	//err = utils.Verify(user, utils.IdVerify)
+	//if err != nil {
+	//	response.FailWithMessage(err.Error(), c)
+	//	return
+	//}
 
 	if user.AuthorityIds != 0 {
 		err = userService.SetUserAuthorities(user.ID, user.AuthorityIds)
@@ -384,6 +386,7 @@ func (b *BaseApi) SetUserInfo(c *gin.Context) {
 		Email:     user.Email,
 		SideMode:  user.SideMode,
 		Enable:    user.Enable,
+		OnePrice:  user.OnePrice,
 	})
 	if err != nil {
 		global.GVA_LOG.Error("设置失败!", zap.Error(err))

+ 5 - 2
server/dao/borrowing.go

@@ -22,7 +22,7 @@ func (Borrowing) TableName() string {
 // TODO:支借查询
 
 // QueryBorrowingList 查询支借列表
-func QueryBorrowingList(limit, offset int, name, time string) (borrowing []Borrowing, total int64, err error) {
+func QueryBorrowingList(limit, offset int, name, time, yearTime string) (borrowing []Borrowing, total int64, err error) {
 	// 创建db
 	db := global.GVA_DB.Model(&Borrowing{})
 	// 如果有条件搜索 下方会自动创建搜索语句
@@ -30,7 +30,10 @@ func QueryBorrowingList(limit, offset int, name, time string) (borrowing []Borro
 		db = db.Where("name LIKE ?", "%"+name+"%")
 	}
 	if time != "" {
-		db = db.Where("DATE_FORMAT(application_time, '%Y-%m-%d') = ?", time)
+		db = db.Where("DATE_FORMAT(application_time, '%Y-%m') = ?", time)
+	}
+	if yearTime != "" {
+		db = db.Where("DATE_FORMAT(application_time, '%Y') = ?", yearTime)
 	}
 	err = db.Count(&total).Error
 	if err != nil {

+ 7 - 3
server/dao/dailyExpenses.go

@@ -25,7 +25,7 @@ func (DailyExpenses) TableName() string {
 // TODO:日常费用查询
 
 // QueryDailyExpensesList 查询日常费用列表
-func QueryDailyExpensesList(limit, offset, genre int, name, time string) (dailyExpenses []DailyExpenses, total int64, err error) {
+func QueryDailyExpensesList(limit, offset, genre int, name, time, yearTime string) (dailyExpenses []DailyExpenses, total int64, err error) {
 	// 创建db
 	db := global.GVA_DB.Model(&DailyExpenses{})
 	// 如果有条件搜索 下方会自动创建搜索语句
@@ -36,7 +36,10 @@ func QueryDailyExpensesList(limit, offset, genre int, name, time string) (dailyE
 		db = db.Where("name LIKE ?", "%"+name+"%")
 	}
 	if time != "" {
-		db = db.Where("DATE_FORMAT(application_time, '%Y-%m-%d') = ?", time)
+		db = db.Where("DATE_FORMAT(application_time, '%Y-%m') = ?", time)
+	}
+	if yearTime != "" {
+		db = db.Where("DATE_FORMAT(application_time, '%Y') = ?", yearTime)
 	}
 	err = db.Count(&total).Error
 	if err != nil {
@@ -87,7 +90,8 @@ func (de DailyExpenses) UpdateDailyExpenses() error {
 			return txErr
 		}
 		for _, dailyFeeDetail := range de.DailyFeeDetails {
-			txErr := tx.Create(&dailyFeeDetail).Error
+			dailyFeeDetail.DailyFeeId = de.ID
+			txErr := tx.Model(&DailyFeeDetails{}).Create(&dailyFeeDetail).Error
 			if txErr != nil {
 				return txErr
 			}

+ 5 - 0
server/dao/department.go

@@ -36,6 +36,11 @@ func QueryUsersByDepId(depId int) (users []SysUser, err error) {
 	return users, err
 }
 
+func QueryDepById(id int) (dep Department, err error) {
+	err = global.GVA_DB.Model(&Department{}).Where("id = ?", id).First(&dep).Error
+	return dep, err
+}
+
 // TODO:部门新增
 
 // CreateDep 创建部门

+ 118 - 0
server/dao/expenses.go

@@ -0,0 +1,118 @@
+package dao
+
+import "server/global"
+
+type Expenses struct {
+	global.GVA_MODEL
+	Reimburser        int           `json:"reimburser" form:"reimburser" gorm:"comment:报销人"`
+	SysUser           SysUser       `json:"user" form:"user" gorm:"foreignKey:Reimburser;references:id;"`
+	DepartmentId      int           `json:"departmentId" form:"departmentId" gorm:"comment:部门id"`
+	Department        Department    `json:"department" form:"department" gorm:"foreignKey:DepartmentId;references:id;"`
+	ExpenditureAmount float64       `json:"expenditureAmount" form:"expenditureAmount" gorm:"comment:支出金额;type:double(10,2)"`
+	DepositAmount     float64       `json:"depositAmount" form:"depositAmount" gorm:"comment:支入金额;type:double(10,2)"`
+	FeeTime           string        `json:"feeTime" form:"feeTime" gorm:"comment:时间"`
+	Genre             int           `json:"genre" form:"genre" gorm:"comment:费用类型id"`
+	ExpensesGenre     ExpensesGenre `json:"expensesGenre" form:"expensesGenre" gorm:"foreignKey:Genre;references:id;"`
+	ProjectId         int           `json:"projectId" form:"projectId" gorm:"comment:项目id"`
+	Project           Project       `json:"project" form:"project" gorm:"foreignKey:ProjectId;references:id"`
+	ExpenseDetail     string        `json:"expenseDetail" form:"expenseDetail" gorm:"comment:费用明细"`
+	Remarks           string        `json:"remarks" form:"remarks" gorm:"comment:备注"`
+	ThenBalance       float64       `json:"thenBalance" form:"thenBalance" gorm:"comment:当时余额;type:double(10,2)"`
+}
+
+type ExpensesResult struct {
+	Reimburser           int     `json:"reimburser" form:"reimburser" gorm:"comment:报销人"`
+	SysUser              SysUser `json:"user" form:"user" gorm:"foreignKey:Reimburser;references:id;"`
+	ExpenditureAmountSum float64
+	DepositAmountSum     float64
+	DepartmentId         int        `json:"departmentId" form:"departmentId" gorm:"comment:部门id"`
+	Department           Department `json:"department" form:"department" gorm:"foreignKey:DepartmentId;references:id;"`
+	Expenses             []Expenses `json:"expenses" form:"expenses" gorm:"-"`
+}
+
+func (Expenses) TableName() string {
+	return "expenses"
+}
+
+func QueryExpensesList(limit, offset, genre, projectId, name int, dayTime, monthTime, yearTime string) (expenses []Expenses, total int64, err error) {
+	// 创建db
+	db := global.GVA_DB.Model(&Expenses{})
+	// 如果有条件搜索 下方会自动创建搜索语句
+	if genre != 0 {
+		db = db.Where("genre = ?", genre)
+	}
+	if projectId != 0 {
+		db = db.Where("project_id = ?", projectId)
+	}
+	if name != 0 {
+		db = db.Where("reimburser = ?", name)
+	}
+	if dayTime != "" {
+		db = db.Where("DATE_FORMAT(fee_time, '%Y-%m-%d') = ?", dayTime)
+	}
+	if monthTime != "" {
+		db = db.Where("DATE_FORMAT(fee_time, '%Y-%m') = ?", monthTime)
+	}
+	if yearTime != "" {
+		db = db.Where("DATE_FORMAT(fee_time, '%Y') = ?", yearTime)
+	}
+	err = db.Count(&total).Error
+	if err != nil {
+		return
+	}
+	err = db.Order("id desc").Limit(limit).Offset(offset).Preload("SysUser").Preload("Department").Preload("ExpensesGenre").Preload("Project").Find(&expenses).Error
+	return expenses, total, err
+}
+
+func QueryExpensesSumByPeople(limit, offset, genre, projectId, name int, dayTime, monthTime, yearTime string) (results []ExpensesResult, total int64, err error) {
+	db := global.GVA_DB.Model(&Expenses{}).Select("reimburser,SUM(expenditure_amount) as expenditure_amount_sum,SUM(deposit_amount) as deposit_amount_sum,department_id")
+	// 如果有条件搜索 下方会自动创建搜索语句
+	if genre != 0 {
+		db = db.Where("genre = ?", genre)
+	}
+	if projectId != 0 {
+		db = db.Where("project_id = ?", projectId)
+	}
+	if name != 0 {
+		db = db.Where("reimburser = ?", name)
+	}
+	if dayTime != "" {
+		db = db.Where("DATE_FORMAT(fee_time, '%Y-%m-%d') = ?", dayTime)
+	}
+	if monthTime != "" {
+		db = db.Where("DATE_FORMAT(fee_time, '%Y-%m') = ?", monthTime)
+	}
+	if yearTime != "" {
+		db = db.Where("DATE_FORMAT(fee_time, '%Y') = ?", yearTime)
+	}
+	err = db.Group("reimburser,department_id").Limit(limit).Offset(offset).Preload("SysUser").Preload("Department").Count(&total).Scan(&results).Error
+
+	return
+}
+
+func QuerySurplus() (interface{}, error) {
+	type Result struct {
+		FeeTime              string
+		ExpenditureAmountSum float64
+		DepositAmountSum     float64
+		Surplus              float64
+	}
+
+	var results []Result
+	db := global.GVA_DB.Model(&Expenses{}).Select("DATE_FORMAT(fee_time, '%Y-%m') AS fee_time, SUM(expenditure_amount) AS expenditure_amount_sum,SUM(deposit_amount) AS deposit_amount_sum,(SUM(deposit_amount) - SUM(expenditure_amount)) AS surplus")
+
+	err := db.Group("DATE_FORMAT(fee_time, '%Y-%m')").Scan(&results).Error
+	return results, err
+}
+
+func (e Expenses) CreateExpenses() error {
+	return global.GVA_DB.Create(&e).Error
+}
+
+func (e Expenses) UpdateExpenses() error {
+	return global.GVA_DB.Model(&Expenses{}).Updates(&e).Error
+}
+
+func (e Expenses) DeleteExpenses() error {
+	return global.GVA_DB.Unscoped().Where("id = ?", e.ID).Delete(&e).Error
+}

+ 11 - 11
server/dao/projectWorkingHours.go

@@ -6,11 +6,11 @@ import (
 
 type ProjectWorkingHours struct {
 	global.GVA_MODEL
-	ProjectCode string      `json:"projectCode" form:"projectCode" gorm:"comment:项目编号"`
-	People      int         `json:"people" form:"people" gorm:"comment:报工人"`
-	Constructor Constructor `json:"constructor" form:"constructor" gorm:"foreignKey:People;references:id;"`
-	Days        float64     `json:"days" form:"days" gorm:"type:double(5,1);not null;comment:天数"`
-	PeopleTime  string      `json:"peopleTime" form:"peopleTime" gorm:"comment:报工时间"`
+	ProjectCode string  `json:"projectCode" form:"projectCode" gorm:"comment:项目编号"`
+	People      int     `json:"people" form:"people" gorm:"comment:报工人"`
+	SysUser     SysUser `json:"constructor" form:"constructor" gorm:"foreignKey:People;references:id;"`
+	Days        float64 `json:"days" form:"days" gorm:"type:double(5,1);not null;comment:天数"`
+	PeopleTime  string  `json:"peopleTime" form:"peopleTime" gorm:"comment:报工时间"`
 }
 
 func (ProjectWorkingHours) TableName() string {
@@ -40,7 +40,7 @@ func QueryWorkingHoursList(limit, offset, people int, code, time, yearTime strin
 	if err != nil {
 		return
 	}
-	err = db.Order("id desc").Limit(limit).Offset(offset).Preload("Constructor").Find(&projectWorkingHours).Error
+	err = db.Order("id desc").Limit(limit).Offset(offset).Preload("SysUser").Find(&projectWorkingHours).Error
 	return projectWorkingHours, total, err
 }
 
@@ -53,8 +53,8 @@ func QueryWorkingHoursSum(limit, offset, people int, code, time, yearTime string
 	}
 
 	var results []Result
-	db := global.GVA_DB.Model(&ProjectWorkingHours{}).Select("people,constructor.`name`,SUM(days) as sum_day,(SUM(days) * one_price) as price_sum").
-		Joins("JOIN constructor ON project_working_hours.people = constructor.id")
+	db := global.GVA_DB.Model(&ProjectWorkingHours{}).Select("people,sys_users.`nick_name` as name,SUM(days) as sum_day,(SUM(days) * one_price) as price_sum").
+		Joins("JOIN sys_users ON project_working_hours.people = sys_users.id")
 
 	// 如果有条件搜索 下方会自动创建搜索语句
 	if code != "" {
@@ -69,19 +69,19 @@ func QueryWorkingHoursSum(limit, offset, people int, code, time, yearTime string
 	if yearTime != "" {
 		db = db.Where("DATE_FORMAT(people_time, '%Y') = ?", yearTime)
 	}
-	err = db.Group("people").Limit(limit).Offset(offset).Preload("Constructor").Count(&total).Scan(&results).Error
+	err = db.Group("people").Limit(limit).Offset(offset).Preload("SysUser").Count(&total).Scan(&results).Error
 	return results, total, err
 }
 
 // QueryWorkingHours 查询工时
 func QueryWorkingHours(code string) (workingHours []ProjectWorkingHours, err error) {
-	err = global.GVA_DB.Model(&ProjectWorkingHours{}).Where("project_code = ?", code).Preload("Constructor").Find(&workingHours).Error
+	err = global.GVA_DB.Model(&ProjectWorkingHours{}).Where("project_code = ?", code).Preload("SysUser").Find(&workingHours).Error
 	return workingHours, err
 }
 
 // QueryWorkingHoursByCode 查询单个工时 按id
 func QueryWorkingHoursByCode(code string, people int) (workingHours ProjectWorkingHours, err error) {
-	err = global.GVA_DB.Model(&ProjectWorkingHours{}).Where("code = ? and people = ?", code, people).Preload("Constructor").First(&workingHours).Error
+	err = global.GVA_DB.Model(&ProjectWorkingHours{}).Where("code = ? and people = ?", code, people).Preload("SysUser").First(&workingHours).Error
 	return workingHours, err
 }
 

+ 3 - 2
server/dao/sys_user.go

@@ -22,7 +22,8 @@ type SysUser struct {
 	Phone        string       `json:"phone"  gorm:"comment:用户手机号"`                     // 用户手机号
 	Email        string       `json:"email"  gorm:"comment:用户邮箱"`                      // 用户邮箱
 	Enable       int          `json:"enable" gorm:"default:1;comment:用户是否被冻结 1正常 2冻结"` //用户是否被冻结 1正常 2冻结
-	DepartmentId int          `json:"departmentId" gorm:"comment:部门id"`
+	DepartmentId int          `json:"departmentId" form:"departmentId" gorm:"comment:部门id"`
+	OnePrice     float64      `json:"onePrice" form:"onePrice" gorm:"comment:人天单价"`
 }
 
 func (SysUser) TableName() string {
@@ -136,7 +137,7 @@ func SetUserAuthorities(id uint, authorityId uint) (err error) {
 
 // SetUserInfo 修改用户信息
 func (u SysUser) SetUserInfo() error {
-	return global.GVA_DB.Model(&SysUser{}).Updates(&u).Error
+	return global.GVA_DB.Model(&SysUser{}).Where("id = ?", u.ID).Updates(&u).Error
 }
 
 // SetUserInfoById 修改用户信息 按id

+ 1 - 0
server/initialize/gorm.go

@@ -61,6 +61,7 @@ func RegisterTables() {
 		dao.Reimbursement{},
 		dao.FeeDetails{},
 		dao.Constructor{},
+		dao.Expenses{},
 	)
 	if err != nil {
 		global.GVA_LOG.Error("register table failed", zap.Error(err))

+ 1 - 0
server/initialize/router.go

@@ -92,6 +92,7 @@ func Routers() *gin.Engine {
 		adminRouter.InitFileRouter(PrivateGroup)
 		adminRouter.InitFinanceRouter(PrivateGroup)
 		adminRouter.InitConstructorRouter(PrivateGroup)
+		adminRouter.InitExpensesRouter(PrivateGroup)
 	}
 
 	global.GVA_LOG.Info("router register success")

+ 25 - 0
server/model/common/request/common.go

@@ -45,6 +45,31 @@ type SearchWorkingHours struct {
 	People   int      `json:"people" form:"people"`
 }
 
+type SearchDailyFee struct {
+	PageInfo PageInfo `json:"pageInfo" form:"pageInfo"`
+	Name     string   `json:"name" form:"name"`
+	Time     string   `json:"time" form:"time"`
+	YearTime string   `json:"yearTime" form:"yearTime"`
+	Genre    int      `json:"genre" form:"genre"`
+}
+
+type SearchNameTime struct {
+	PageInfo PageInfo `json:"pageInfo" form:"pageInfo"`
+	Name     string   `json:"name" form:"name"`
+	Time     string   `json:"time" form:"time"`
+	YearTime string   `json:"yearTime" form:"yearTime"`
+}
+
+type SearchExpenses struct {
+	PageInfo   PageInfo `json:"pageInfo" form:"pageInfo"`
+	Reimburser int      `json:"reimburser" form:"reimburser"`
+	ProjectId  int      `json:"projectId" form:"projectId"`
+	Genre      int      `json:"genre" form:"genre"`
+	DayTime    string   `json:"dayTime" form:"dayTime"`
+	MonthTime  string   `json:"monthTime" form:"monthTime"`
+	YearTime   string   `json:"yearTime" form:"yearTime"`
+}
+
 type SearchProjectList struct {
 	PageInfo PageInfo `json:"pageInfo" form:"pageInfo"`
 	Code     string   `json:"code" form:"code"`

+ 1 - 0
server/model/system/request/sys_user.go

@@ -52,4 +52,5 @@ type ChangeUserInfo struct {
 	SideMode     string             `json:"sideMode"  gorm:"comment:用户侧边主题"`                                                      // 用户侧边主题
 	Enable       int                `json:"enable" gorm:"comment:冻结用户"`                                                           //冻结用户
 	Authorities  []dao.SysAuthority `json:"-" gorm:"many2many:sys_user_authority;"`
+	OnePrice     float64            `json:"onePrice" form:"onePrice" gorm:"comment:人天单价"`
 }

+ 1 - 0
server/router/admin/enter.go

@@ -6,4 +6,5 @@ type RouterGroup struct {
 	ConstructorRouter
 	FileRouter
 	FinanceRouter
+	ExpensesRouter
 }

+ 26 - 0
server/router/admin/expenses.go

@@ -0,0 +1,26 @@
+package admin
+
+import (
+	"github.com/gin-gonic/gin"
+	v1 "server/api/v1"
+	"server/middleware"
+)
+
+type ExpensesRouter struct{}
+
+func (s *DepartmentRouter) InitExpensesRouter(Router *gin.RouterGroup) {
+	expensesRouter := Router.Group("expenses").Use(middleware.OperationRecord())
+	expensesRouterWithoutRecord := Router.Group("expenses")
+
+	expensesApi := v1.ApiGroupApp.AdminApiGroup.ExpensesApi
+	{
+		expensesRouter.POST("createExpenses", expensesApi.CreateExpenses)
+		expensesRouter.PUT("updateExpenses", expensesApi.UpdateExpenses)
+		expensesRouter.DELETE("deleteExpenses", expensesApi.DeleteExpenses)
+	}
+	{
+		expensesRouterWithoutRecord.POST("queryExpensesList", expensesApi.QueryExpensesList)
+		expensesRouterWithoutRecord.POST("queryExpensesSumByPeople", expensesApi.QueryExpensesSumByPeople)
+		expensesRouterWithoutRecord.GET("querySurplus", expensesApi.QuerySurplus)
+	}
+}

+ 1 - 0
server/service/admin/enter.go

@@ -6,4 +6,5 @@ type ServiceGroup struct {
 	FileService
 	FinanceService
 	ConstructorService
+	ExpensesService
 }

+ 55 - 0
server/service/admin/expenses.go

@@ -0,0 +1,55 @@
+package admin
+
+import (
+	"server/dao"
+	"server/model/common/request"
+)
+
+type ExpensesService struct{}
+
+func (es *ExpensesService) QueryExpensesList(info request.SearchExpenses) ([]dao.Expenses, int64, error) {
+	limit := info.PageInfo.PageSize
+	offset := info.PageInfo.PageSize * (info.PageInfo.Page - 1)
+	return dao.QueryExpensesList(limit, offset, info.Genre, info.ProjectId, info.Reimburser, info.DayTime, info.MonthTime, info.YearTime)
+}
+
+func (es *ExpensesService) QueryExpensesSumByPeople(info request.SearchExpenses) ([]dao.ExpensesResult, int64, error) {
+	limit := info.PageInfo.PageSize
+	offset := info.PageInfo.PageSize * (info.PageInfo.Page - 1)
+	expenses, total, err := dao.QueryExpensesSumByPeople(limit, offset, info.Genre, info.ProjectId, info.Reimburser, info.DayTime, info.MonthTime, info.YearTime)
+	for i, expens := range expenses {
+		list, _, err := dao.QueryExpensesList(1000, 0, info.Genre, info.ProjectId, expens.Reimburser, info.DayTime, info.MonthTime, info.YearTime)
+		if err != nil {
+			return expenses, total, err
+		}
+		deps, err := dao.QueryDepById(expens.DepartmentId)
+		if err != nil {
+			return expenses, total, err
+		}
+		user, err := dao.QueryUserByUserId(uint(expens.Reimburser))
+		if err != nil {
+			return expenses, total, err
+		}
+		expenses[i].Expenses = list
+		expenses[i].Department = deps
+		expenses[i].SysUser = user
+	}
+
+	return expenses, total, err
+}
+
+func (es *ExpensesService) QuerySurplus() (interface{}, error) {
+	return dao.QuerySurplus()
+}
+
+func (es *ExpensesService) CreateExpenses(expenses dao.Expenses) error {
+	return expenses.CreateExpenses()
+}
+
+func (es *ExpensesService) UpdateExpenses(expenses dao.Expenses) error {
+	return expenses.UpdateExpenses()
+}
+
+func (es *ExpensesService) DeleteExpenses(expenses dao.Expenses) error {
+	return expenses.DeleteExpenses()
+}

+ 4 - 4
server/service/admin/finance.go

@@ -7,10 +7,10 @@ import (
 
 type FinanceService struct{}
 
-func (fs *FinanceService) QueryDailyExpensesList(info request.SearchProject) (list interface{}, total int64, err error) {
+func (fs *FinanceService) QueryDailyExpensesList(info request.SearchDailyFee) (list interface{}, total int64, err error) {
 	limit := info.PageInfo.PageSize
 	offset := info.PageInfo.PageSize * (info.PageInfo.Page - 1)
-	dailyExpenses, total, err := dao.QueryDailyExpensesList(limit, offset, info.State, info.Name, info.Time)
+	dailyExpenses, total, err := dao.QueryDailyExpensesList(limit, offset, info.Genre, info.Name, info.Time, info.YearTime)
 
 	for i, expenses := range dailyExpenses {
 		feeDetails, err := dao.QueryDailyFeeDetails(int(expenses.ID))
@@ -40,10 +40,10 @@ func (fs *FinanceService) QueryExpensesGenre() ([]dao.ExpensesGenre, error) {
 	return dao.QueryExpensesGenre()
 }
 
-func (fs *FinanceService) QueryBorrowingList(info request.SearchProject) (list interface{}, total int64, err error) {
+func (fs *FinanceService) QueryBorrowingList(info request.SearchNameTime) (list interface{}, total int64, err error) {
 	limit := info.PageInfo.PageSize
 	offset := info.PageInfo.PageSize * (info.PageInfo.Page - 1)
-	borrowing, total, err := dao.QueryBorrowingList(limit, offset, info.Name, info.Time)
+	borrowing, total, err := dao.QueryBorrowingList(limit, offset, info.Name, info.Time, info.YearTime)
 	return borrowing, total, err
 }
 

+ 1 - 0
server/service/system/sys_user.go

@@ -29,6 +29,7 @@ func (userService *UserService) Register(u dao.SysUser) (userInter dao.SysUser,
 	// 否则 附加uuid 密码hash加密 注册
 	u.Password = utils.BcryptHash(u.Password)
 	u.UUID = uuid.Must(uuid.NewV4())
+	u.DepartmentId = 1
 	err = u.CreateUser()
 	return u, err
 }

+ 7 - 0
web/src/api/cost.js

@@ -8,6 +8,13 @@ export const queryCostList = (data) => {
   })
 }
 
+export const querySurplus = () => {
+  return service({
+    url: '/expenses/querySurplus',
+    method: 'get',
+  })
+}
+
 // 新增费用
 export const createCost = (data) => {
   return service({

+ 2 - 2
web/src/view/dashboard/dashboardTable/dashboardTable.vue

@@ -71,7 +71,7 @@ const already = (val) => {
   console.log(val.collection)
   let sum = 0
   for (const key in val.collection) {
-    sum = sum + Number(val.collection[key].price)
+    sum = sum + Number(val.collection[key].collectionPrice)
   }
   return sum
 }
@@ -79,7 +79,7 @@ const already = (val) => {
 const isTo = (val) => {
   let sum = 0
   for (const key in val.collection) {
-    sum = sum + Number(val.collection[key].price)
+    sum = sum + Number(val.collection[key].collectionPrice)
   }
   return Number(val.price) - sum
 }

+ 17 - 3
web/src/view/department/department.vue

@@ -302,6 +302,7 @@ const handleSwitchChange = async(row) => {
   await updateDepStatus(row).then(res => {
     if (res.code === 0) {
       ElMessage.success('更新成功')
+      queryData()
     }
   })
 }
@@ -325,7 +326,10 @@ const handleEditDep = (row) => {
 
 const handleUpdateDep = async() => {
   await updateDep(updateDepFromData.value).then(res => {
-    console.log(res)
+    if (res.code === 0) {
+      ElMessage.success('更新成功')
+      queryData()
+    }
   })
   updateDialogVisible.value = false
 }
@@ -343,6 +347,12 @@ const handleDeleteDep = (row) => {
     .then(async() => {
       await deleteDep(row.ID).then(res => {
         console.log(res)
+        if (res.code === 0) {
+          ElMessage.success('删除成功')
+          queryData()
+        } else if (res.msg === '当前部门下存在用户') {
+          ElMessage.error('当前部门下存在用户')
+        }
       })
       await queryData()
     })
@@ -385,7 +395,9 @@ const distributionDep = async() => {
     return false
   }
   await updateUserDep(distributionDepData.value).then(res => {
-    console.log(res)
+    if (res.code === 0) {
+      ElMessage.success('更新成功')
+    }
   })
   await queryData()
   distributionDialogVisible.value = false
@@ -407,7 +419,9 @@ const handleAddDep = async() => {
     return false
   }
   await createDep(depFromData.value).then(res => {
-    console.log(res)
+    if (res.code === 0) {
+      ElMessage.success('新增成功')
+    }
   })
   await queryData()
   centerDialogVisible.value = false

+ 5 - 5
web/src/view/finance/borrowing/borrowing.vue

@@ -519,7 +519,7 @@ const searchDailyExpenses = reactive({
   name: '',
   time: '',
   yearTime: '',
-  state: null
+  genre: null
 })
 // 分页
 const dailyExpensesSizeChange = (val) => {
@@ -555,19 +555,18 @@ const borrowingCurrentChange = (val) => {
 }
 
 const queryData = async() => {
-  if (searchDailyExpenses.state === '') {
-    searchDailyExpenses.state = null
+  if (searchDailyExpenses.genre === '') {
+    searchDailyExpenses.genre = null
   }
   // 查询类型
   await queryExpensesGenre().then(res => {
-    // console.log('查询1:', res.data)
     feeGenre.value = res.data
   })
   // 查询用户列表
   await getAllUsers().then(res => {
-    // console.log('查询2:', res.data)
     users.value = res.data
   })
+  console.log(searchDailyExpenses)
   // 日常费用列表
   await queryDailyExpensesList(searchDailyExpenses).then(res => {
     const list = res.data.list
@@ -665,6 +664,7 @@ const sumExpenses = () => {
 const saveDailyExpenses = async() => {
   for (let i = 0; i < dailyExpensesData.value.dailyFeeDetails.length; i++) {
     dailyExpensesData.value.dailyFeeDetails[i].id = null
+    dailyExpensesData.value.dailyFeeDetails[i].ID = null
   }
   const dd = dailyExpensesData.value
   // 校验

+ 1 - 1
web/src/view/finance/workingHours/workingHours.vue

@@ -221,7 +221,7 @@
       <!--      修改-->
       <el-dialog
         v-model="workingDialog"
-        title="修改工时"
+        title="Warning"
         width="500"
         align-center
       >

+ 7 - 0
web/src/view/superAdmin/user/user.vue

@@ -186,6 +186,12 @@
         >
           <el-input v-model="userInfo.email" />
         </el-form-item>
+        <el-form-item
+          label="人天单价"
+          prop="onePrice"
+        >
+          <el-input v-model.number="userInfo.onePrice" />
+        </el-form-item>
         <el-form-item
           label="用户角色"
           prop="authorityId"
@@ -357,6 +363,7 @@ const userInfo = ref({
   headerImg: '',
   authorityId: '',
   enable: 1,
+  onPrice: 0,
 })
 
 const rules = ref({