995 lines
25 KiB
Go
995 lines
25 KiB
Go
|
package order
|
|||
|
|
|||
|
import (
|
|||
|
"errors"
|
|||
|
"fmt"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/account"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/department"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/order"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/position"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/rule"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/common/untils/timetool"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/model/login"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/model/query"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/model/vo"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/serializer"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/service"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/utils"
|
|||
|
"github.com/gin-gonic/gin"
|
|||
|
"github.com/gin-gonic/gin/binding"
|
|||
|
"github.com/shopspring/decimal"
|
|||
|
"strconv"
|
|||
|
"strings"
|
|||
|
"time"
|
|||
|
)
|
|||
|
|
|||
|
// ReportsList 提交的报表列表
|
|||
|
func ReportsList(c *gin.Context) {
|
|||
|
req := &order.ReportList{}
|
|||
|
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
|||
|
service.Error(c, e.InvalidParams, err)
|
|||
|
return
|
|||
|
}
|
|||
|
userInfoAny, _ := c.Get("jwtInfo")
|
|||
|
userInfo := userInfoAny.(login.Info)
|
|||
|
fmt.Println(userInfo)
|
|||
|
req.Status = []uint64{e.REPORT_PUBLISH}
|
|||
|
|
|||
|
res, err := service.OrderProvider.GetReports(c, req)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
Tels := &account.UsersByTelRequest{
|
|||
|
Domain: "fontree",
|
|||
|
Tels: []string{
|
|||
|
"13862003100",
|
|||
|
"13773091883",
|
|||
|
"15895559080",
|
|||
|
},
|
|||
|
}
|
|||
|
fmt.Println(res.Data)
|
|||
|
userMap, err := fetchUserMap(c, Tels)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
serializer.ProcessReportReads(res.Data, userMap)
|
|||
|
response := vo.PageResponse{
|
|||
|
Count: res.Count,
|
|||
|
Data: serializer.BuildReports(res.Data),
|
|||
|
}
|
|||
|
|
|||
|
service.Success(c, response)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// ReportsMyList 历史周报
|
|||
|
func ReportsMyList(c *gin.Context) {
|
|||
|
req := &order.ReportList{}
|
|||
|
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
|||
|
service.Error(c, e.InvalidParams, err)
|
|||
|
return
|
|||
|
}
|
|||
|
userInfoAny, _ := c.Get("jwtInfo")
|
|||
|
userInfo := userInfoAny.(login.Info)
|
|||
|
fmt.Println(userInfo)
|
|||
|
if len(userInfo.PositionUsers) == 0 {
|
|||
|
service.Success(c, vo.PageResponse{
|
|||
|
Count: 0,
|
|||
|
Data: nil,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
req.Status = []uint64{e.REPORT_PUBLISH}
|
|||
|
departmentIds := []uint64{}
|
|||
|
//todo 判断当前人员是否有出纳权限
|
|||
|
for _, i := range userInfo.PositionUsers {
|
|||
|
tellerRes, _ := service.PositionProvider.DoIHavaAuth(c, &position.DoIHavaAuthRequest{
|
|||
|
Domain: "fontree",
|
|||
|
UserId: userInfo.ID,
|
|||
|
Url: e.SellerTellerKey,
|
|||
|
DepartmentID: i.DepartmentId,
|
|||
|
})
|
|||
|
if tellerRes.Hava == true {
|
|||
|
departmentIds = append(departmentIds, i.DepartmentId)
|
|||
|
}
|
|||
|
}
|
|||
|
if len(departmentIds) == 0 {
|
|||
|
service.Success(c, vo.PageResponse{
|
|||
|
Count: 0,
|
|||
|
Data: nil,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
req.SiteIds = departmentIds
|
|||
|
res, err := service.OrderProvider.GetReports(c, req)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
response := vo.PageResponse{
|
|||
|
Count: res.Count,
|
|||
|
Data: serializer.BuildReports(res.Data),
|
|||
|
}
|
|||
|
|
|||
|
service.Success(c, response)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func ReportRe(c *gin.Context) {
|
|||
|
req := &order.SetStatusRequest{}
|
|||
|
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
|||
|
service.Error(c, e.InvalidParams, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
req.Status = e.REPORT_NEED_CASHIER_SURE
|
|||
|
|
|||
|
res, err := service.OrderProvider.SetReportStatus(c, req)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
detailReq := &order.ReportDetail{ID: req.ID}
|
|||
|
|
|||
|
detailRes, err := service.OrderProvider.GetReport(c, detailReq)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
fmt.Println(detailRes)
|
|||
|
if len(detailRes.ReportUsers) > 0 {
|
|||
|
var users []*order.ReportUserRequest
|
|||
|
|
|||
|
for _, tt := range detailRes.ReportUsers {
|
|||
|
temp := &order.ReportUserRequest{
|
|||
|
ID: tt.ID,
|
|||
|
DueAmount: "0",
|
|||
|
}
|
|||
|
users = append(users, temp)
|
|||
|
}
|
|||
|
|
|||
|
upReq := &order.UpdateReportUserList{Data: users}
|
|||
|
|
|||
|
res, err = service.OrderProvider.UpdateReportUsers(c, upReq)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
service.Success(c, res)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func ReportSure(c *gin.Context) {
|
|||
|
req := &order.SetStatusRequest{}
|
|||
|
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
|||
|
service.Error(c, e.InvalidParams, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
req.Status = e.REPORT_NEED_BOSS_SURE
|
|||
|
|
|||
|
res, err := service.OrderProvider.SetReportStatus(c, req)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
service.Success(c, res)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// ReportUsersUpdate 提交的报表列表
|
|||
|
func ReportUsersUpdate(c *gin.Context) {
|
|||
|
req := &order.UpdateReportUserList{}
|
|||
|
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
|||
|
service.Error(c, e.InvalidParams, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
res, err := service.OrderProvider.UpdateReportUsers(c, req)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
err = MakeReportSure(c, req.ID, e.REPORT_CASHIER_FINAL_OPTION)
|
|||
|
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
service.Success(c, res)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// CashierReportsList 出纳查看列表
|
|||
|
func CashierReportsList(c *gin.Context) {
|
|||
|
|
|||
|
var saleSites []string
|
|||
|
req := &order.ReportList{}
|
|||
|
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
|||
|
service.Error(c, e.InvalidParams, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if len(req.Status) == 0 {
|
|||
|
req.Status = []uint64{e.REPORT_NEED_CASHIER_SURE, e.REPORT_NEED_BOSS_SURE, e.REPORT_CASHIER_FINAL_OPTION}
|
|||
|
}
|
|||
|
|
|||
|
userInfo := login.GetUserInfoFromC(c)
|
|||
|
for _, tt := range userInfo.PositionUsers {
|
|||
|
saleSites = append(saleSites, tt.DepartmentName)
|
|||
|
}
|
|||
|
|
|||
|
req.SaleSites = saleSites
|
|||
|
//req.SaleSite = userInfo.PositionUsers[0].DepartmentName
|
|||
|
|
|||
|
res, err := service.OrderProvider.GetReports(c, req)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
fmt.Println(res.Data)
|
|||
|
|
|||
|
response := vo.PageResponse{
|
|||
|
Count: res.Count,
|
|||
|
Data: serializer.BuildReports(res.Data),
|
|||
|
}
|
|||
|
|
|||
|
service.Success(c, response)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// ReportUsers 提交的销售报表列表
|
|||
|
func ReportUsers(c *gin.Context) {
|
|||
|
req := &order.ReportUserList{}
|
|||
|
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
|||
|
service.Error(c, e.InvalidParams, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
res, err := service.OrderProvider.GetReportUsers(c, req)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
userInfoAny, _ := c.Get("jwtInfo")
|
|||
|
userInfo := userInfoAny.(login.Info)
|
|||
|
if userInfo.TelNum == "13773091883" || userInfo.TelNum == "15895559080" || userInfo.TelNum == "13862003100" {
|
|||
|
orderRead := &order.ReportReadRequest{
|
|||
|
UserId: userInfo.ID,
|
|||
|
ReportId: req.ReportId,
|
|||
|
UserName: userInfo.NickName,
|
|||
|
}
|
|||
|
_, err = service.OrderProvider.ReportRead(c, orderRead)
|
|||
|
if err != nil {
|
|||
|
fmt.Println(err)
|
|||
|
}
|
|||
|
}
|
|||
|
getUserMap(c, res.Data)
|
|||
|
|
|||
|
response := vo.PageResponse{
|
|||
|
Count: res.Count,
|
|||
|
Data: serializer.BuildReportUsers(res.Data),
|
|||
|
}
|
|||
|
|
|||
|
service.Success(c, response)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// DownOrders 下载报表
|
|||
|
func DownOrders(c *gin.Context) {
|
|||
|
StartDate := c.DefaultQuery("StartDate", "")
|
|||
|
EndDate := c.DefaultQuery("EndDate", "")
|
|||
|
SaleSite := c.DefaultQuery("SaleSite", "")
|
|||
|
IdsString := c.DefaultQuery("IDs", "")
|
|||
|
StartPayDate := c.DefaultQuery("StartPayDate", "")
|
|||
|
EndPayDate := c.DefaultQuery("EndPayDate", "")
|
|||
|
StartArrivalDate := c.DefaultQuery("StartArrivalDate", "")
|
|||
|
EndArrivalDate := c.DefaultQuery("EndArrivalDate", "")
|
|||
|
PayType := c.DefaultQuery("PayType", "")
|
|||
|
var ids []string
|
|||
|
if IdsString != "" {
|
|||
|
ids = strings.Split(IdsString, ",")
|
|||
|
}
|
|||
|
payTypeInt := 0
|
|||
|
if PayType != "" {
|
|||
|
payTypeInt, _ = strconv.Atoi(PayType)
|
|||
|
}
|
|||
|
req := &order.OrderList{
|
|||
|
Page: 1,
|
|||
|
PageSize: 999999,
|
|||
|
StartDate: StartDate,
|
|||
|
EndDate: EndDate,
|
|||
|
Ids: ids,
|
|||
|
SaleSite: SaleSite,
|
|||
|
StartPayDate: StartPayDate,
|
|||
|
EndPayDate: EndPayDate,
|
|||
|
StartArrivalDate: StartArrivalDate,
|
|||
|
EndArrivalDate: EndArrivalDate,
|
|||
|
PayType: uint32(payTypeInt),
|
|||
|
}
|
|||
|
|
|||
|
fmt.Println(req)
|
|||
|
|
|||
|
res, err := service.OrderProvider.GetOrders(c, req)
|
|||
|
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
var data []interface{}
|
|||
|
if len(res.Data) > 0 {
|
|||
|
for i, v := range res.Data {
|
|||
|
var artworkTypeString = "一手画"
|
|||
|
var payTypeString = query.GetPayTypeString(v.PayType)
|
|||
|
var isOutSeller = "否"
|
|||
|
if v.ArtworkType == 2 {
|
|||
|
artworkTypeString = "二手画"
|
|||
|
}
|
|||
|
|
|||
|
if v.IsOutSeller == 1 {
|
|||
|
isOutSeller = "是"
|
|||
|
}
|
|||
|
|
|||
|
temp := query.DownOrderColumnName{
|
|||
|
Index: fmt.Sprintf("%d", i+1),
|
|||
|
ClientName: v.ClientName,
|
|||
|
ClientIdNum: v.ClientIdNum,
|
|||
|
ArtistName: v.ArtistName,
|
|||
|
BuyerName: v.BuyerName,
|
|||
|
BuyerIdNum: v.BuyerIdNum,
|
|||
|
OrderNum: v.OrderNum,
|
|||
|
ArtworkNum: v.ArtworkNum,
|
|||
|
ArtworkName: v.ArtworkName,
|
|||
|
ArtworkTypeString: artworkTypeString,
|
|||
|
ArtworkSellNum: v.ArtworkSellNum,
|
|||
|
EntryYear: v.EntryYear,
|
|||
|
EntryMonth: v.EntryMonth,
|
|||
|
SellTime: timetool.GetYmdFromString(v.SellTime),
|
|||
|
PayDate: v.PayDate,
|
|||
|
SignDate: v.SignDate,
|
|||
|
ArrivalDate: v.ArrivalDate,
|
|||
|
PayTypeString: payTypeString,
|
|||
|
Bank: v.Bank,
|
|||
|
ArtworkSize: v.ArtworkSize,
|
|||
|
Price: v.Price,
|
|||
|
CopyrightFee: v.CopyrightFee,
|
|||
|
EntrustPrice: v.EntrustPrice,
|
|||
|
PersonTax: v.PersonTax,
|
|||
|
//Commission: v.Commission,
|
|||
|
//AfterTaxIncome: v.AfterTaxIncome,
|
|||
|
Commission: "",
|
|||
|
AfterTaxIncome: "",
|
|||
|
SaleSite: v.SaleSite,
|
|||
|
SellerName: v.SellerName,
|
|||
|
RecordCompany: v.RecordCompany,
|
|||
|
ShowName: v.ShowName,
|
|||
|
IsOutSellerString: isOutSeller,
|
|||
|
ShowRegion: v.ShowRegion,
|
|||
|
CompanyRegion: v.CompanyRegion,
|
|||
|
//EntrustStartDate: v.EntrustStartDate,
|
|||
|
//EntrustEndDate: v.EntrustEndDate,
|
|||
|
//RetrievalStartDate: v.RetrievalStartDate,
|
|||
|
//RetrievalEndDate: v.RetrievalEndDate,
|
|||
|
MerchantNo: v.MerchantNo,
|
|||
|
Remark: v.Remark,
|
|||
|
}
|
|||
|
data = append(data, &temp)
|
|||
|
}
|
|||
|
}
|
|||
|
fmt.Println(data)
|
|||
|
content := utils.ToExcel(query.OrderColumnName, data, "struct")
|
|||
|
|
|||
|
utils.ResponseXls(c, content, query.OrderUserExcelName)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// DownReportUsers 下载报表
|
|||
|
func DownReportUsers(c *gin.Context) {
|
|||
|
id := c.Query("id")
|
|||
|
parseInt, err := strconv.ParseInt(id, 10, 64)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if parseInt == 0 {
|
|||
|
service.Error(c, e.Error, errors.New(e.GetMsg(e.InvalidParams)))
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
req := &order.ReportUserList{
|
|||
|
ReportId: uint64(parseInt),
|
|||
|
Page: 1,
|
|||
|
PageSize: 999999,
|
|||
|
}
|
|||
|
|
|||
|
res, err := service.OrderProvider.GetReportUsers(c, req)
|
|||
|
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
getUserMap(c, res.Data)
|
|||
|
|
|||
|
var data []interface{}
|
|||
|
if len(res.Data) > 0 {
|
|||
|
for _, v := range res.Data {
|
|||
|
remark := " "
|
|||
|
|
|||
|
decAmount, err := decimal.NewFromString(v.Amount)
|
|||
|
if err == nil && decAmount.GreaterThanOrEqual(decimal.NewFromInt(150000)) {
|
|||
|
remark = "喜报"
|
|||
|
}
|
|||
|
|
|||
|
temp := query.DownReportUser{
|
|||
|
IDNum: v.SellerNum,
|
|||
|
Name: v.SellerName,
|
|||
|
Amount: v.Amount,
|
|||
|
DueAmount: v.DueAmount,
|
|||
|
IncreaseAmount: v.IncreaseAmount,
|
|||
|
IncreaseRate: v.IncreaseRate,
|
|||
|
Remark: remark,
|
|||
|
}
|
|||
|
data = append(data, &temp)
|
|||
|
}
|
|||
|
}
|
|||
|
fmt.Println(data)
|
|||
|
content := utils.ToExcel(query.ReportUserColumnName, data, "struct")
|
|||
|
|
|||
|
utils.ResponseXls(c, content, query.ReportUserExcelName)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func getUserMap(c *gin.Context, list []*order.ReportUserRequest) {
|
|||
|
|
|||
|
var userIds []uint64
|
|||
|
for _, tt := range list {
|
|||
|
userIds = append(userIds, tt.SellerID)
|
|||
|
}
|
|||
|
|
|||
|
userMap := make(map[uint64]*account.AccountInfo)
|
|||
|
|
|||
|
IdsReq := account.ListByIDsRequest{
|
|||
|
IDs: userIds,
|
|||
|
PageSize: 999999,
|
|||
|
Page: 1,
|
|||
|
}
|
|||
|
|
|||
|
userRes, userErr := service.AccountProvider.ListByIDs(c, &IdsReq)
|
|||
|
|
|||
|
if userErr != nil || userRes == nil || len(userRes.Data) == 0 {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
for _, t := range userRes.Data {
|
|||
|
userMap[t.ID] = t
|
|||
|
}
|
|||
|
|
|||
|
for index, t := range list {
|
|||
|
if _, ok := userMap[t.SellerID]; ok {
|
|||
|
list[index].SellerAvatar = userMap[t.SellerID].Avatar
|
|||
|
list[index].SellerNum = userMap[t.SellerID].JobNum
|
|||
|
}
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func MakeReportSure(c *gin.Context, id uint64, status uint64) error {
|
|||
|
req := &order.SetStatusRequest{ID: id}
|
|||
|
req.Status = status
|
|||
|
|
|||
|
_, err := service.OrderProvider.SetReportStatus(c, req)
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
return nil
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
// BeforeUser 未发布之前的业绩报表
|
|||
|
func BeforeUser(c *gin.Context) {
|
|||
|
pageRes := vo.PageRes{
|
|||
|
Count: 0,
|
|||
|
}
|
|||
|
reqJson := &query.ReportCreateQuery{}
|
|||
|
if err := c.ShouldBindBodyWith(&reqJson, binding.JSON); err != nil {
|
|||
|
service.Error(c, e.InvalidParams, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
userInfoAny, _ := c.Get("jwtInfo")
|
|||
|
userInfo := userInfoAny.(login.Info)
|
|||
|
//todo 判断当前人员是否有出纳权限
|
|||
|
tellerRes, _ := service.PositionProvider.DoIHavaAuth(c, &position.DoIHavaAuthRequest{
|
|||
|
Domain: "fontree",
|
|||
|
UserId: userInfo.ID,
|
|||
|
Url: e.SellerTellerKey,
|
|||
|
DepartmentID: reqJson.DepartmentId,
|
|||
|
})
|
|||
|
if tellerRes.Hava == false {
|
|||
|
service.Success(c, nil)
|
|||
|
return
|
|||
|
}
|
|||
|
////todo 李菲丽账号特殊处理 账号不存在吴江站 但要统计在吴江站总金额下 用户id写死 徐嘉鸿的奇怪需求
|
|||
|
//specialLi := false
|
|||
|
//if reqJson.DepartmentId == 74 {
|
|||
|
// specialLi = true
|
|||
|
//}
|
|||
|
//0 获取当前提交的now数据
|
|||
|
report, err := GetNowDoingReport(c, reqJson.DepartmentName)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if report != nil {
|
|||
|
pageRes = vo.PageRes{
|
|||
|
Count: uint64(len(report.ReportUsers)),
|
|||
|
Data: serializer.BuildReportUsers(report.ReportUsers),
|
|||
|
}
|
|||
|
|
|||
|
service.Success(c, pageRes)
|
|||
|
return
|
|||
|
}
|
|||
|
ReportQuery := &order.ReportQueryRequest{
|
|||
|
EndDate: reqJson.EndDate,
|
|||
|
StartDate: reqJson.StartDate,
|
|||
|
EndDateDue: reqJson.EndDateDue,
|
|||
|
StartDateDue: reqJson.StartDateDue,
|
|||
|
DepartmentName: reqJson.DepartmentName,
|
|||
|
DepartmentId: reqJson.DepartmentId,
|
|||
|
}
|
|||
|
repReq := &order.ReportList{
|
|||
|
SiteIds: []uint64{reqJson.DepartmentId},
|
|||
|
}
|
|||
|
reportRes, _ := service.OrderProvider.GetReports(c, repReq)
|
|||
|
if len(reportRes.Data) == 0 {
|
|||
|
ReportQuery.Success = true
|
|||
|
} else {
|
|||
|
ReportQuery.Success = false
|
|||
|
}
|
|||
|
reportQuery, _ := service.OrderProvider.GetReportQuery(c, ReportQuery)
|
|||
|
reqJson.EndDate = reportQuery.EndDate
|
|||
|
reqJson.StartDateDue = reportQuery.StartDateDue
|
|||
|
reqJson.EndDateDue = reportQuery.EndDateDue
|
|||
|
if ReportQuery.Success == false {
|
|||
|
reqJson.StartDate = reportQuery.StartDate
|
|||
|
}
|
|||
|
|
|||
|
//1 没有now数据,实时获取数据
|
|||
|
req := &order.ReportCreateRequest{
|
|||
|
SaleSite: reqJson.SaleSite,
|
|||
|
Status: reqJson.Status,
|
|||
|
StartDate: reqJson.StartDate,
|
|||
|
EndDate: reqJson.EndDate,
|
|||
|
LeaderId: reqJson.LeaderId,
|
|||
|
LeaderName: reqJson.LeaderName,
|
|||
|
}
|
|||
|
|
|||
|
userReq := &rule.FindByUrlRequest{
|
|||
|
Url: e.SellerStaffKey,
|
|||
|
Domain: "fontree",
|
|||
|
DepartmentIds: []uint64{reqJson.DepartmentId},
|
|||
|
}
|
|||
|
|
|||
|
user, err := service.RuleProvider.FindUsersByUrl(c, userReq)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
for _, i := range user.List {
|
|||
|
fmt.Println("================ service.RuleProvider.FindUsersByUrl =======================", i.UserName, i.UserId)
|
|||
|
}
|
|||
|
//if specialLi {
|
|||
|
// user.List = append(user.List, &rule.UserInfo{
|
|||
|
// UserId: 102,
|
|||
|
// UserName: "李菲莉",
|
|||
|
// })
|
|||
|
//}
|
|||
|
var staffs []*order.Staff
|
|||
|
var userIds []uint64
|
|||
|
for _, i := range user.List {
|
|||
|
temp := &order.Staff{
|
|||
|
ID: i.UserId,
|
|||
|
Name: i.UserName,
|
|||
|
}
|
|||
|
staffs = append(staffs, temp)
|
|||
|
userIds = append(userIds, i.UserId)
|
|||
|
}
|
|||
|
|
|||
|
if userIds == nil || len(userIds) == 0 {
|
|||
|
service.Success(c, pageRes)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
IdsReq := account.ListByIDsRequest{
|
|||
|
IDs: userIds,
|
|||
|
PageSize: reqJson.PageSize,
|
|||
|
Page: reqJson.Page,
|
|||
|
}
|
|||
|
|
|||
|
userRes, userErr := service.AccountProvider.ListByIDs(c, &IdsReq)
|
|||
|
|
|||
|
if userErr != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
for _, i := range userRes.Data {
|
|||
|
fmt.Println("================ service.AccountProvider.ListByIDs=======================", i.NickName, i.ID)
|
|||
|
}
|
|||
|
req.Staffs = staffs
|
|||
|
req.LeaderId = userInfo.ID
|
|||
|
req.LeaderName = userInfo.NickName
|
|||
|
req.StartDateDue = reqJson.StartDateDue
|
|||
|
req.EndDateDue = reqJson.EndDateDue
|
|||
|
//depid := &department.DetailRequest{
|
|||
|
// ID: int64(reqJson.DepartmentId),
|
|||
|
//}
|
|||
|
//siteUid, err := service.DepartmentProvider.Detail(c, depid)
|
|||
|
//req.SiteUid = siteUid.SyncID
|
|||
|
req.SaleSite = reqJson.DepartmentName
|
|||
|
res, err := service.OrderProvider.BeforeCreateUsers(c, req)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
for _, i := range res.Data {
|
|||
|
fmt.Println("================ service.AccountProvider.ListByIDs=======================", i.SellerName, i.ID)
|
|||
|
}
|
|||
|
reportUserMap := make(map[uint64]*order.ReportUserRequest)
|
|||
|
processedNames := make(map[string]bool) // 用于记录已经处理过的姓名
|
|||
|
sumAmount := float64(0)
|
|||
|
sumDueAmount := float64(0)
|
|||
|
//sumIncreaseAmount := float64(0)
|
|||
|
for _, i := range res.Data {
|
|||
|
//amount, _ := strconv.ParseFloat(i.Amount, 64)
|
|||
|
//sumAmount += amount
|
|||
|
if processedNames[i.SellerName] {
|
|||
|
continue // 如果姓名已存在,跳过当前记录
|
|||
|
}
|
|||
|
|
|||
|
// 标记该姓名已处理
|
|||
|
processedNames[i.SellerName] = true
|
|||
|
sumDue, _ := strconv.ParseFloat(i.DueAmount, 64)
|
|||
|
sumDueAmount += sumDue
|
|||
|
//sumIncrease, _ := strconv.ParseFloat(i.IncreaseAmount, 64)
|
|||
|
//sumIncreaseAmount += sumIncrease
|
|||
|
}
|
|||
|
//if len(res.Data) >= 0 {
|
|||
|
// data := &order.ReportUserRequest{
|
|||
|
// SellerID: 0,
|
|||
|
// Amount: strconv.FormatFloat(sumAmount, 'f', -1, 64),
|
|||
|
// DueAmount: strconv.FormatFloat(sumDueAmount, 'f', -1, 64),
|
|||
|
// IncreaseAmount: strconv.FormatFloat(sumIncreaseAmount, 'f', -1, 64),
|
|||
|
// ReportID: 3,
|
|||
|
// Color: getColor(sumAmount, sumDueAmount),
|
|||
|
// }
|
|||
|
// res.Data = append(res.Data, data)
|
|||
|
//}
|
|||
|
for _, tt := range res.Data {
|
|||
|
reportUserMap[tt.SellerID] = tt
|
|||
|
}
|
|||
|
//列表
|
|||
|
var reportUsers []*vo.ReportUser
|
|||
|
|
|||
|
//if len(userRes.Data) >= 0 {
|
|||
|
// data := &account.AccountInfo{
|
|||
|
// ID: 0,
|
|||
|
// NickName: "团队",
|
|||
|
// }
|
|||
|
// userRes.Data = append(userRes.Data, data)
|
|||
|
//}
|
|||
|
fmt.Println("================ 销售宝 周报生成前用户=======================", userRes.Data)
|
|||
|
for _, tt := range userRes.Data {
|
|||
|
temp := &order.ReportUserRequest{
|
|||
|
SellerID: tt.ID,
|
|||
|
SellerName: tt.NickName,
|
|||
|
SellerNum: tt.JobNum,
|
|||
|
Amount: "0",
|
|||
|
DueAmount: "0",
|
|||
|
IncreaseAmount: "0",
|
|||
|
IncreaseRate: "1",
|
|||
|
}
|
|||
|
if tt.Status == "left" && reportUserMap[tt.ID].Amount == "0.00" {
|
|||
|
continue
|
|||
|
}
|
|||
|
//if tt.ID == 102 && specialLi {
|
|||
|
// amli := reportUserMap[tt.ID].Amount
|
|||
|
// amount, _ := strconv.ParseFloat(amli, 64)
|
|||
|
// sumAmount += amount
|
|||
|
// continue
|
|||
|
//}
|
|||
|
if _, ok := reportUserMap[tt.ID]; ok {
|
|||
|
temp.Amount = reportUserMap[tt.ID].Amount
|
|||
|
temp.DueAmount = reportUserMap[tt.ID].DueAmount
|
|||
|
temp.IncreaseRate = reportUserMap[tt.ID].IncreaseRate
|
|||
|
temp.IncreaseAmount = reportUserMap[tt.ID].IncreaseAmount
|
|||
|
temp.Color = reportUserMap[tt.ID].Color
|
|||
|
amount, _ := strconv.ParseFloat(temp.Amount, 64)
|
|||
|
sumAmount += amount
|
|||
|
//sumDue, _ := strconv.ParseFloat(temp.DueAmount, 64)
|
|||
|
//sumDueAmount += sumDue
|
|||
|
//sumIncrease, _ := strconv.ParseFloat(temp.IncreaseAmount, 64)
|
|||
|
//sumIncreaseAmount += sumIncrease
|
|||
|
}
|
|||
|
//sumIncreaseAmount = sumAmount - sumDueAmount
|
|||
|
reportUsers = append(reportUsers, serializer.BuildReportUserReq(temp))
|
|||
|
}
|
|||
|
|
|||
|
fmt.Println("================ 销售宝 周报生成后用户=======================", reportUsers)
|
|||
|
reportUsers = append(reportUsers, serializer.BuildReportUserReq(&order.ReportUserRequest{
|
|||
|
SellerID: 0,
|
|||
|
SellerName: "团队",
|
|||
|
Amount: strconv.FormatFloat(sumAmount, 'f', -1, 64),
|
|||
|
DueAmount: strconv.FormatFloat(sumDueAmount, 'f', -1, 64),
|
|||
|
IncreaseAmount: strconv.FormatFloat(sumAmount-sumDueAmount, 'f', -1, 64),
|
|||
|
ReportID: 3,
|
|||
|
Color: getColor(sumAmount, sumDueAmount),
|
|||
|
}))
|
|||
|
pageRes = vo.PageRes{
|
|||
|
Count: userRes.Count,
|
|||
|
EndDate: reqJson.EndDate,
|
|||
|
StartDate: reqJson.StartDate,
|
|||
|
EndDateDue: reqJson.EndDateDue,
|
|||
|
StartDateDue: reqJson.StartDateDue,
|
|||
|
Data: reportUsers,
|
|||
|
DepartmentId: reqJson.DepartmentId,
|
|||
|
}
|
|||
|
|
|||
|
service.Success(c, pageRes)
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// ReportCreate 生成报表
|
|||
|
func ReportCreate(c *gin.Context) {
|
|||
|
req := &order.ReportCreateRequest{}
|
|||
|
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
|||
|
service.Error(c, e.InvalidParams, err)
|
|||
|
return
|
|||
|
}
|
|||
|
userInfoAny, _ := c.Get("jwtInfo")
|
|||
|
userInfo := userInfoAny.(login.Info)
|
|||
|
|
|||
|
req.SaleSite = req.DepartmentName
|
|||
|
|
|||
|
userReq := &department.UsersRequest{}
|
|||
|
|
|||
|
userReq.ID = req.DepartmentId
|
|||
|
//siteid := &department.DetailRequest{
|
|||
|
// ID: int64(req.DepartmentId),
|
|||
|
//}
|
|||
|
//siteUid, err := service.DepartmentProvider.Detail(c, siteid)
|
|||
|
//req.SiteUid = siteUid.SyncID
|
|||
|
|
|||
|
ures, err := service.DepartmentProvider.Users(c, userReq)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
//specialLi := false
|
|||
|
//if req.DepartmentId == 74 {
|
|||
|
// specialLi = true
|
|||
|
//}
|
|||
|
var userIds []uint64
|
|||
|
//if specialLi {
|
|||
|
// userIds = append(userIds, 102)
|
|||
|
//}
|
|||
|
for _, tt := range ures.Users {
|
|||
|
positionRes, _ := service.PositionProvider.DoIHavaAuth(c, &position.DoIHavaAuthRequest{
|
|||
|
Domain: "fontree",
|
|||
|
UserId: tt.UserID,
|
|||
|
Url: e.SellerStaffKey,
|
|||
|
DepartmentID: req.DepartmentId,
|
|||
|
})
|
|||
|
if positionRes.Hava == false {
|
|||
|
continue
|
|||
|
}
|
|||
|
userIds = append(userIds, tt.UserID)
|
|||
|
}
|
|||
|
if userIds == nil || len(userIds) == 0 {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
idsReq := &account.ListByIDsRequest{IDs: userIds}
|
|||
|
|
|||
|
idRes, err := service.AccountProvider.ListByIDs(c, idsReq)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
var staffs []*order.Staff
|
|||
|
for _, tt := range idRes.Data {
|
|||
|
temp := &order.Staff{
|
|||
|
ID: tt.ID,
|
|||
|
Name: tt.NickName,
|
|||
|
JobNum: tt.JobNum,
|
|||
|
Status: tt.Status,
|
|||
|
}
|
|||
|
staffs = append(staffs, temp)
|
|||
|
}
|
|||
|
|
|||
|
req.Staffs = staffs
|
|||
|
req.LeaderId = userInfo.ID
|
|||
|
req.LeaderName = userInfo.NickName
|
|||
|
|
|||
|
res, err := service.OrderProvider.ReportCreate(c, req)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
transactionsRes, err := service.OrderProvider.GetTransactions(c, &order.TransactionsRequest{
|
|||
|
Domain: "fontree",
|
|||
|
StartDate: req.StartDate,
|
|||
|
EndDate: req.EndDate,
|
|||
|
SaleSites: []string{req.DepartmentName},
|
|||
|
//SaleSiteUid: siteUid.SyncID,
|
|||
|
})
|
|||
|
var ids []uint64
|
|||
|
for _, i := range transactionsRes.Data {
|
|||
|
ids = append(ids, i.ID)
|
|||
|
}
|
|||
|
_, err = service.OrderProvider.UpdateTransactionStage(c, &order.UpdateTransactionStageReq{
|
|||
|
Ids: ids,
|
|||
|
Status: 2,
|
|||
|
})
|
|||
|
service.Success(c, serializer.BuilderIDRes(res.ID))
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// ReportPublish 发布报表
|
|||
|
func ReportPublish(c *gin.Context) {
|
|||
|
req := &order.ReportDetail{}
|
|||
|
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
|||
|
service.Error(c, e.InvalidParams, err)
|
|||
|
return
|
|||
|
}
|
|||
|
res, err := service.OrderProvider.ReportPublic(c, req)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
service.Success(c, res)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
//GetNowDoingReport 获取流程中的报告
|
|||
|
|
|||
|
func GetNowDoingReport(c *gin.Context, departName string) (*order.ReportRequest, error) {
|
|||
|
// ReportsList 提交的报表列表
|
|||
|
req := &order.ReportList{}
|
|||
|
|
|||
|
userInfoAny, _ := c.Get("jwtInfo")
|
|||
|
userInfo := userInfoAny.(login.Info)
|
|||
|
req.SaleSite = departName
|
|||
|
req.Status = []uint64{e.REPORT_NEED_CASHIER_SURE, e.REPORT_NEED_BOSS_SURE, e.REPORT_CASHIER_FINAL_OPTION}
|
|||
|
req.LeaderId = userInfo.ID
|
|||
|
|
|||
|
res, err := service.OrderProvider.GetReports(c, req)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
if len(res.Data) > 0 {
|
|||
|
return res.Data[0], nil
|
|||
|
}
|
|||
|
|
|||
|
return nil, nil
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
// CheckSalesAmount 查询销售员到期金额
|
|||
|
func CheckSalesAmount(c *gin.Context) {
|
|||
|
req := &order.ReportCheckSales{}
|
|||
|
req.SalesmanName = c.Query("salesmanName")
|
|||
|
|
|||
|
req.DepartmentName = c.Query("departmentName")
|
|||
|
req.StartDate = c.Query("startDate")
|
|||
|
req.EndDate = c.Query("endDate")
|
|||
|
//userInfoAny, _ := c.Get("jwtInfo")
|
|||
|
//userInfo := userInfoAny.(login.Info)
|
|||
|
//req.DepartmentName = userInfo.DepartmentName
|
|||
|
res, err := service.OrderProvider.GetCheckSalesAmount(c, req)
|
|||
|
//pageRes := vo.PageRes{
|
|||
|
// Count: res.Money,
|
|||
|
// //Data: res,
|
|||
|
//}
|
|||
|
if err != nil {
|
|||
|
//return res.Money, err
|
|||
|
service.Success(c, res)
|
|||
|
} else {
|
|||
|
service.Success(c, res)
|
|||
|
}
|
|||
|
//return 0, err
|
|||
|
//
|
|||
|
//service.Success(c, pageRes)
|
|||
|
}
|
|||
|
func NowReport(c *gin.Context) {
|
|||
|
// ReportsList 提交的报表列表
|
|||
|
depid := c.Query("departmentName")
|
|||
|
report, err := GetNowDoingReport(c, depid)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if report != nil {
|
|||
|
service.Success(c, report)
|
|||
|
} else {
|
|||
|
service.Success(c, struct{}{})
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// FindDates 查询周报日期
|
|||
|
func FindDates(c *gin.Context) {
|
|||
|
req := &order.ReportList{}
|
|||
|
req.SaleSite = c.Query("departmentName")
|
|||
|
req.Status = []uint64{e.REPORT_PUBLISH}
|
|||
|
res, err := service.OrderProvider.GetReports(c, req)
|
|||
|
if err != nil {
|
|||
|
service.Error(c, e.Error, err)
|
|||
|
return
|
|||
|
}
|
|||
|
if len(res.Data) == 0 {
|
|||
|
service.Success(c, "")
|
|||
|
}
|
|||
|
if len(res.Data) > 0 {
|
|||
|
lastElement := res.Data[0]
|
|||
|
date, err := time.Parse("2006-01-02", lastElement.EndDate)
|
|||
|
if err != nil {
|
|||
|
fmt.Println("日期解析错误:", err)
|
|||
|
return
|
|||
|
}
|
|||
|
nextDate := date.Add(24 * time.Hour).Format("2006-01-02")
|
|||
|
service.Success(c, nextDate)
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
func getColor(increase, rate float64) string {
|
|||
|
//到期 rate //当此increase
|
|||
|
if rate == 0 {
|
|||
|
return "newValue"
|
|||
|
} else {
|
|||
|
increaseOverRate := increase / rate
|
|||
|
if increaseOverRate < 1 {
|
|||
|
return "red"
|
|||
|
} else if increaseOverRate < 1.3 && increaseOverRate > 1 {
|
|||
|
return "yellow"
|
|||
|
} else if increaseOverRate >= 1.3 {
|
|||
|
return "green"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return "unknown"
|
|||
|
}
|
|||
|
func fetchUserMap(c *gin.Context, Tels *account.UsersByTelRequest) (map[uint64]string, error) {
|
|||
|
userList, err := service.AccountProvider.UsersByTel(c, Tels)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
userMap := make(map[uint64]string)
|
|||
|
if len(userList.Data) != 0 {
|
|||
|
for _, i := range userList.Data {
|
|||
|
userMap[i.ID] = i.NickName
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return userMap, nil
|
|||
|
}
|