作者 陈志颖

feat:修改导出功能,增加搜索和栏目设置

... ... @@ -16,6 +16,8 @@ type ListOrderBaseQuery struct {
DeliveryCode string `json:"deliveryCode"`
//公司id
CompanyId int64 `json:"companyId"`
//用户uid
Uid int64 `json:"uid"`
//订单类型
OrderType int `json:"orderType"`
//合伙人分类
... ...
/**
@author: stevechan
@date: 2021/1/27
@note:
**/
package query
type ListOrderForExcelQuery struct {
Type string `json:"type"` // 操作类型 ORDER_BASE
Where Where `json:"where"` // 导出条件
IDS []int `json:"ids"` // 勾选id
}
type Where struct {
PartnerName string `json:"partnerName"` // 合伙人姓名
OrderCode string `json:"orderCode"` // 订单号
DeliveryCode string `json:"deliveryCode"` // 发货单号
PartnerCategory int `json:"partnerCategory"` // 合伙人类型
PartnerCategoryName string `json:"partnerCategoryName"` // 合伙人类型名称
UpdateTime []string `json:"updateTime"` // 更新时间
CreateTime []string `json:"createTime"` // 创建时间
SaleDate []string `json:"saleDate"` // 销售日期
}
... ...
... ... @@ -2,6 +2,8 @@ package service
import (
"fmt"
"github.com/linmadan/egglib-go/core/application"
"strconv"
"github.com/astaxie/beego/logs"
... ... @@ -909,7 +911,7 @@ func (service OrderInfoService) ListOrderForExcel(listOrderQuery query.ListOrder
return nil, nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error())
}
defer func() {
transactionContext.RollbackTransaction()
_ = transactionContext.RollbackTransaction()
}()
var (
... ... @@ -930,10 +932,29 @@ func (service OrderInfoService) ListOrderForExcel(listOrderQuery query.ListOrder
[2]string{listOrderQuery.CreateTimeBegin, listOrderQuery.CreateTimeEnd},
[2]string{listOrderQuery.SaleDateBegin, listOrderQuery.SaleDateEnd},
listOrderQuery.PartnerCategory,
listOrderQuery.PartnerCategoryName,
)
if err != nil {
return nil, nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
}
// 获取栏目设置
var columnSettingRepository domain.ColumnSettingRepository
if value, errFact := factory.CreateColumnSettingRepository(map[string]interface{}{
"transactionContext": transactionContext,
}); errFact != nil {
return nil, nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
} else {
columnSettingRepository = value
}
columnSettingFound, err := columnSettingRepository.FindOne(map[string]interface{}{"uid": listOrderQuery.Uid, "companyId": listOrderQuery.CompanyId})
if err != nil {
return nil, nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
}
if columnSettingFound == nil {
return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(listOrderQuery.Uid, 10)))
}
err = transactionContext.CommitTransaction()
if err != nil {
return nil, nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
... ... @@ -941,49 +962,72 @@ func (service OrderInfoService) ListOrderForExcel(listOrderQuery query.ListOrder
var resultMaps []map[string]string
for i := range ordersData {
m := map[string]string{
"num": fmt.Sprint(i + 1),
"order_code": ordersData[i].OrderCode,
"delivery_code": ordersData[i].DeliveryCode,
"partner_name": ordersData[i].PartnerName,
"update_time": ordersData[i].UpdateTime,
"create_time": ordersData[i].CreateTime,
"plan_order_count": fmt.Sprint(ordersData[i].PlanOrderCount),
"use_order_count": "",
"region_name": fmt.Sprint(ordersData[i].RegionName),
"plan_order_amount": fmt.Sprintf("%10.2f", ordersData[i].PlanOrderAmount),
"use_order_amount": "",
"partner_category": ordersData[i].PartnerCategory,
"buyer_name": ordersData[i].BuyerName,
//"num": fmt.Sprint(i + 1),
//"order_code": ordersData[i].OrderCode,
//"delivery_code": ordersData[i].DeliveryCode,
//"partner_name": ordersData[i].PartnerName,
//"update_time": ordersData[i].UpdateTime,
//"create_time": ordersData[i].CreateTime,
//"sale_date": ordersData[i].SaleDate,
//"plan_order_count": fmt.Sprint(ordersData[i].PlanOrderCount),
//"use_order_count": "",
//"region_name": fmt.Sprint(ordersData[i].RegionName),
//"plan_order_amount": fmt.Sprintf("%10.2f", ordersData[i].PlanOrderAmount),
//"use_order_amount": "",
//"partner_category": ordersData[i].PartnerCategory,
//"buyer_name": ordersData[i].BuyerName,
"index": fmt.Sprint(i + 1),
"orderId": ordersData[i].OrderCode,
"shipmentsId": ordersData[i].DeliveryCode,
"partner": ordersData[i].PartnerName,
"update_time": ordersData[i].UpdateTime,
"create_time": ordersData[i].CreateTime,
"saleDate": ordersData[i].SaleDate,
"orderNum": fmt.Sprint(ordersData[i].PlanOrderCount),
"quantityControl": "",
"orderDist": fmt.Sprint(ordersData[i].RegionName),
"orderPrice": fmt.Sprintf("%10.2f", ordersData[i].PlanOrderAmount),
"priceControl": "",
"partnerCategory": ordersData[i].PartnerCategory,
"buyer": ordersData[i].BuyerName,
}
if ordersData[i].UseOrderCount >= 0 {
m["use_order_count"] = fmt.Sprint(ordersData[i].UseOrderCount)
m["quantityControl"] = fmt.Sprint(ordersData[i].UseOrderCount)
}
if ordersData[i].UseOrderAmount >= 0 {
m["use_order_amount"] = fmt.Sprintf("%10.2f", ordersData[i].UseOrderAmount)
m["priceControl"] = fmt.Sprintf("%10.2f", ordersData[i].UseOrderAmount)
}
resultMaps = append(resultMaps, m)
}
column := [][2]string{
[2]string{"num", "序号"},
[2]string{"order_code", "订单号"},
[2]string{"delivery_code", "发货单号"},
[2]string{"create_time", "创建时间"},
[2]string{"update_time", "更新时间"},
[2]string{"plan_order_count", "订单数量"},
[2]string{"use_order_count", "数量调整"},
[2]string{"plan_order_amount", "订单金额"},
[2]string{"use_order_amount", "金额调整"},
[2]string{"region_name", "订单区域"},
[2]string{"partner_category", "合伙人类型"},
[2]string{"buyer_name", "客户"},
[2]string{"partner_name", "合伙人"},
//column := [][2]string{
// [2]string{"num", "序号"},
// [2]string{"order_code", "订单号"},
// [2]string{"delivery_code", "发货单号"},
// [2]string{"create_time", "创建时间"},
// [2]string{"update_time", "更新时间"},
// [2]string{"sale_date", "销售时间"},
// [2]string{"plan_order_count", "订单数量"},
// [2]string{"use_order_count", "数量调整"},
// [2]string{"plan_order_amount", "订单金额"},
// [2]string{"use_order_amount", "金额调整"},
// [2]string{"region_name", "订单区域"},
// [2]string{"partner_category", "合伙人类型"},
// [2]string{"buyer_name", "客户"},
// [2]string{"partner_name", "合伙人"},
//}
var column [][2]string
for _, columnValue := range columnSettingFound.Value {
column = append(column, [2]string{columnValue.Id, columnValue.ParamCn})
}
return resultMaps, column, nil
}
/**
* @Author SteveChan
* @Description //TODO 批量导入创建订单
* @Description //TODO 批量导入创建订单,增加销售时间
* @Date 11:00 2021/1/7
* @Param
* @return
... ...
... ... @@ -258,6 +258,7 @@ type CustomOrderListForExcel struct {
DeliveryCode string //发货编号
UpdateTime string //更新时间
CreateTime string //创建时间
SaleDate string // 销售时间
PlanOrderCount int64 //货品总数
UseOrderCount int64 //货品总数调整
RegionName string //订单区域
... ... @@ -270,7 +271,7 @@ type CustomOrderListForExcel struct {
/**
* @Author SteveChan
* @Description //TODO 导出到excel,增加栏目设置
* @Description // 导出到excel
* @Date 23:45 2021/1/26
* @Param
* @return
... ... @@ -283,12 +284,13 @@ type CustomOrderListForExcel struct {
//@param updateTime 订单更新时间范围"[开始时间,结束时间]",时间格式"2006-01-02 15:04:05+07"
//@param createTime 订单的创建时间范围"[开始时间,结束时间]" 时间格式"2006-01-02 15:04:05+07"
func (dao OrderBaseDao) OrderListForExcel(companyId int64, partnerName string, orderCode string, deliveryCode string,
updateTime [2]string, createTime [2]string, saleDate [2]string, partnerCategory int) (
updateTime [2]string, createTime [2]string, saleDate [2]string, partnerCategory int, partnerCategoryName string) (
result []CustomOrderListForExcel, err error) {
sqlstr := `
SELECT t1.order_code,t1.delivery_code
,to_char(t1.create_time AT TIME ZONE 'CCT' ,'YYYY-MM-DD HH24:MI:SS') AS create_time
,to_char(t1.update_time AT TIME ZONE 'CCT' ,'YYYY-MM-DD HH24:MI:SS') AS update_time
,to_char(t1.sale_date AT TIME ZONE 'CCT' ,'YYYY-MM-DD HH24:MI:SS') AS sale_date
,t1.plan_order_count,t1.use_order_count,t1.plan_order_amount,t1.use_order_amount
,t1.region_info->'regionName' AS region_name,t1.buyer->'buyerName' AS buyer_name
,t1.partner_category->'name' AS partner_category
... ... @@ -322,6 +324,10 @@ func (dao OrderBaseDao) OrderListForExcel(companyId int64, partnerName string, o
params = append(params, partnerCategory)
sqlstr += ` AND t1.partner_category@>'{"id":?}' `
}
if len(partnerCategoryName) > 0 {
params = append(params, partnerCategoryName)
sqlstr += ` AND t1.partner_category->> 'name' like ?`
}
if len(updateTime[0]) > 0 {
params = append(params, updateTime[0])
sqlstr += ` AND t1.update_time>=? `
... ...
... ... @@ -56,18 +56,33 @@ func (repository OrderBaseRepository) Save(orderInfo *domain.OrderBase) error {
tx = repository.transactionContext.PgTx
)
m := &models.OrderBase{
Id: orderInfo.Id, OrderType: orderInfo.OrderType, OrderCode: orderInfo.OrderCode,
DeliveryCode: orderInfo.DeliveryCode, Buyer: orderInfo.Buyer, RegionInfo: orderInfo.RegionInfo,
PartnerId: orderInfo.PartnerId, SalesmanBonusPercent: orderInfo.SalesmanBonusPercent,
SalesmanBonus: orderInfo.OrderCompute.SalesmanBonus, PlanOrderCount: orderInfo.OrderCompute.PlanOrderCount,
PlanOrderAmount: orderInfo.OrderCompute.PlanOrderAmount, UseOrderCount: orderInfo.OrderCompute.UseOrderCount,
UseOrderAmount: orderInfo.OrderCompute.UseOrderAmount, DeliveryTime: orderInfo.DeliveryTime,
PlanPartnerBonus: orderInfo.OrderCompute.PlanPartnerBonus, UsePartnerBonus: orderInfo.OrderCompute.UsePartnerBonus,
PartnerBonusHas: orderInfo.OrderCompute.PartnerBonusHas, PartnerBonusNot: orderInfo.OrderCompute.PartnerBonusNot,
PartnerBonusExpense: orderInfo.OrderCompute.PartnerBonusExpense, IsDisable: orderInfo.IsDisable,
CreateTime: orderInfo.CreateTime, BonusStatus: orderInfo.BonusStatus,
CompanyId: orderInfo.CompanyId, DataFrom: orderInfo.DataFrom,
Remark: orderInfo.Remark, PartnerCategory: orderInfo.PartnerCategory,
Id: orderInfo.Id,
OrderType: orderInfo.OrderType,
OrderCode: orderInfo.OrderCode,
DeliveryCode: orderInfo.DeliveryCode,
Buyer: orderInfo.Buyer,
RegionInfo: orderInfo.RegionInfo,
PartnerId: orderInfo.PartnerId,
SalesmanBonusPercent: orderInfo.SalesmanBonusPercent,
SalesmanBonus: orderInfo.OrderCompute.SalesmanBonus,
PlanOrderCount: orderInfo.OrderCompute.PlanOrderCount,
PlanOrderAmount: orderInfo.OrderCompute.PlanOrderAmount,
UseOrderCount: orderInfo.OrderCompute.UseOrderCount,
UseOrderAmount: orderInfo.OrderCompute.UseOrderAmount,
DeliveryTime: orderInfo.DeliveryTime,
PlanPartnerBonus: orderInfo.OrderCompute.PlanPartnerBonus,
UsePartnerBonus: orderInfo.OrderCompute.UsePartnerBonus,
PartnerBonusHas: orderInfo.OrderCompute.PartnerBonusHas,
PartnerBonusNot: orderInfo.OrderCompute.PartnerBonusNot,
PartnerBonusExpense: orderInfo.OrderCompute.PartnerBonusExpense,
IsDisable: orderInfo.IsDisable,
CreateTime: orderInfo.CreateTime,
SaleDate: orderInfo.SaleDate,
BonusStatus: orderInfo.BonusStatus,
CompanyId: orderInfo.CompanyId,
DataFrom: orderInfo.DataFrom,
Remark: orderInfo.Remark,
PartnerCategory: orderInfo.PartnerCategory,
}
if m.OrderType > 2 { // TODO 非平台自建订单,默认销售日期取订单创建日期
m.SaleDate = orderInfo.CreateTime
... ...
... ... @@ -382,6 +382,7 @@ type postRealOrderDetail struct {
postPurposeOrderDetail
PartnerCategoryId int64 `json:"partnerCategoryId"`
ShipmentsId string `json:"shipmentsId"` //发货单号
SaleDate string `json:"saleDate"` // 销售日期
}
func (postData *postRealOrderDetail) Valid() error {
... ... @@ -412,10 +413,16 @@ func (c *OrderInfoController) UpdateOrderReal() {
return
}
var orderDataReturn *domain.OrderBase
saleDate, err := time.ParseInLocation("2006-01-02", param.SaleDate, time.Local)
if err != nil {
e := lib.ThrowError(lib.ARG_ERROR, err.Error())
c.ResponseError(e)
return
}
if param.Id == 0 {
orderDataReturn, err = c.addOrderReal(param)
orderDataReturn, err = c.addOrderReal(param, saleDate)
} else {
err = c.editOrderReal(param)
err = c.editOrderReal(param, saleDate)
}
if err != nil {
c.ResponseError(err)
... ... @@ -431,7 +438,7 @@ func (c *OrderInfoController) UpdateOrderReal() {
return
}
func (c *OrderInfoController) addOrderReal(param postRealOrderDetail) (*domain.OrderBase, error) {
func (c *OrderInfoController) addOrderReal(param postRealOrderDetail, saleDate time.Time) (*domain.OrderBase, error) {
orderSrv := orderService.NewOrderInfoService(nil)
newGoods := []orderCmd.OrderGoodData{}
for _, v := range param.Product {
... ... @@ -455,12 +462,13 @@ func (c *OrderInfoController) addOrderReal(param postRealOrderDetail) (*domain.O
Goods: newGoods,
CompanyId: companyId,
PartnerCategory: param.PartnerCategoryId,
SaleDate: saleDate,
}
orderData, err := orderSrv.CreateNewOrder(createcmd)
return orderData, err
}
func (c *OrderInfoController) editOrderReal(param postRealOrderDetail) error {
func (c *OrderInfoController) editOrderReal(param postRealOrderDetail, saleDate time.Time) error {
newGoods := []orderCmd.OrderGoodData{}
for _, v := range param.Product {
... ... @@ -485,6 +493,7 @@ func (c *OrderInfoController) editOrderReal(param postRealOrderDetail) error {
Goods: newGoods,
CompanyId: companyId,
PartnerCategory: param.PartnerCategoryId,
SaleDate: saleDate,
}
orderSrv := orderService.NewOrderInfoService(nil)
_, err := orderSrv.UpdateOrderData(updatecmd)
... ... @@ -559,17 +568,20 @@ func (c *OrderInfoController) RemoveOrderReal() {
//ListOrderForExcel excel 导出实际订单的列表
func (c *OrderInfoController) ListOrderForExcel() {
type Parameter struct {
//SearchText string `json:"searchText"`
PartnerName string `json:"partnerName"` // 合伙人姓名
OrderCode string `json:"orderCode"` // 订单号
DeliveryCode string `json:"deliveryCode"` // 发货单号
PartnerCategory int `json:"PartnerCategory"`
UpdateTime []string `json:"updateTime"`
CreateTime []string `json:"createTime"`
}
//type Parameter struct {
// PartnerName string `json:"partnerName"` // 合伙人姓名
// OrderCode string `json:"orderCode"` // 订单号
// DeliveryCode string `json:"deliveryCode"` // 发货单号
// PartnerCategory int `json:"partnerCategory"` // 合伙人类型
// PartnerCategoryName string `json:"partnerCategoryName"` // 合伙人类型名称
// UpdateTime []string `json:"updateTime"` // 更新时间
// CreateTime []string `json:"createTime"` // 创建时间
// SaleDate []string `json:"saleDate"` // 销售日期
//}
var (
param Parameter
//param Parameter
param orderQuery.ListOrderForExcelQuery
err error
)
if err = c.BindJsonData(&param); err != nil {
... ... @@ -577,13 +589,14 @@ func (c *OrderInfoController) ListOrderForExcel() {
c.ResponseError(errors.New("json数据解析失败"))
return
}
// 订单更新时间
var (
updateTimeBegin string
updateTimeEnd string
)
if len(param.UpdateTime) > 0 {
if len(param.UpdateTime[0]) > 0 {
t, err := time.ParseInLocation("2006-01-02", param.UpdateTime[0], time.Local)
if len(param.Where.UpdateTime) > 0 {
if len(param.Where.UpdateTime[0]) > 0 {
t, err := time.ParseInLocation("2006-01-02", param.Where.UpdateTime[0], time.Local)
if err != nil {
c.ResponseError(errors.New("UpdateTimeBegin 时间格式错误"))
return
... ... @@ -591,9 +604,9 @@ func (c *OrderInfoController) ListOrderForExcel() {
updateTimeBegin = t.Format("2006-01-02 15:04:05-07")
}
}
if len(param.UpdateTime) > 1 {
if len(param.UpdateTime[1]) > 0 {
t, err := time.ParseInLocation("2006-01-02", param.UpdateTime[1], time.Local)
if len(param.Where.UpdateTime) > 1 {
if len(param.Where.UpdateTime[1]) > 0 {
t, err := time.ParseInLocation("2006-01-02", param.Where.UpdateTime[1], time.Local)
if err != nil {
c.ResponseError(errors.New("UpdateTimeEnd 时间格式错误"))
return
... ... @@ -603,13 +616,14 @@ func (c *OrderInfoController) ListOrderForExcel() {
updateTimeEnd = t.Format("2006-01-02 15:04:05-07")
}
}
// 订单创建时间
var (
createTimeBegin string
createTimeEnd string
)
if len(param.CreateTime) > 0 {
if len(param.CreateTime[0]) > 0 {
t, err := time.ParseInLocation("2006-01-02", param.CreateTime[0], time.Local)
if len(param.Where.CreateTime) > 0 {
if len(param.Where.CreateTime[0]) > 0 {
t, err := time.ParseInLocation("2006-01-02", param.Where.CreateTime[0], time.Local)
if err != nil {
c.ResponseError(errors.New("UpdateTimeBegin 时间格式错误"))
return
... ... @@ -617,9 +631,9 @@ func (c *OrderInfoController) ListOrderForExcel() {
createTimeBegin = t.Format("2006-01-02 15:04:05-07")
}
}
if len(param.CreateTime) > 1 {
if len(param.CreateTime[1]) > 0 {
t, err := time.ParseInLocation("2006-01-02", param.CreateTime[1], time.Local)
if len(param.Where.CreateTime) > 1 {
if len(param.Where.CreateTime[1]) > 0 {
t, err := time.ParseInLocation("2006-01-02", param.Where.CreateTime[1], time.Local)
if err != nil {
c.ResponseError(errors.New("UpdateTimeEnd 时间格式错误"))
return
... ... @@ -629,21 +643,51 @@ func (c *OrderInfoController) ListOrderForExcel() {
createTimeEnd = t.Format("2006-01-02 15:04:05-07")
}
}
// 订单销售时间处理
var (
saleDateBegin string
saleDateEnd string
)
if len(param.Where.SaleDate) > 0 {
if len(param.Where.SaleDate[0]) > 0 {
t, err := time.ParseInLocation("2006-01-02", param.Where.SaleDate[0], time.Local)
if err != nil {
c.ResponseError(errors.New("销售开始时间格式错误"))
return
}
saleDateBegin = t.Format("2006-01-02 15:04:05-07")
}
}
if len(param.Where.SaleDate) > 1 {
if len(param.Where.SaleDate[1]) > 0 {
t, err := time.ParseInLocation("2006-01-02", param.Where.SaleDate[1], time.Local)
if err != nil {
c.ResponseError(errors.New("销售结束时间格式错误"))
return
}
//设定时间边界
t = t.Add(86399 * time.Second)
saleDateEnd = t.Format("2006-01-02 15:04:05-07")
}
}
companyId := c.GetUserCompany()
uid := c.GetUserId()
orderSrv := orderService.NewOrderInfoService(nil)
orderinfos, columns, err := orderSrv.ListOrderForExcel(orderQuery.ListOrderBaseQuery{
//PartnerOrCode: param.SearchText,
PartnerName: param.PartnerName,
OrderCode: param.OrderCode,
DeliveryCode: param.DeliveryCode,
OrderType: domain.OrderReal,
CompanyId: companyId,
PartnerCategory: param.PartnerCategory,
UpdateTimeBegin: updateTimeBegin,
UpdateTimeEnd: updateTimeEnd,
CreateTimeBegin: createTimeBegin,
CreateTimeEnd: createTimeEnd,
orderInfos, columns, err := orderSrv.ListOrderForExcel(orderQuery.ListOrderBaseQuery{
PartnerName: param.Where.PartnerName,
OrderCode: param.Where.OrderCode,
DeliveryCode: param.Where.DeliveryCode,
OrderType: domain.OrderReal,
CompanyId: companyId,
Uid: uid,
PartnerCategory: param.Where.PartnerCategory,
PartnerCategoryName: param.Where.PartnerCategoryName,
UpdateTimeBegin: updateTimeBegin,
UpdateTimeEnd: updateTimeEnd,
CreateTimeBegin: createTimeBegin,
CreateTimeEnd: createTimeEnd,
SaleDateBegin: saleDateBegin,
SaleDateEnd: saleDateEnd,
})
if err != nil {
c.ResponseError(err)
... ... @@ -659,8 +703,8 @@ func (c *OrderInfoController) ListOrderForExcel() {
}
excelMaker := exceltool.NewExcelMaker()
excelMaker.SetListHead(excelHeaders)
excelMaker.MakeListExcel(orderinfos)
c.ResponseExcelByFile(c.Ctx, excelMaker)
_ = excelMaker.MakeListExcel(orderInfos)
_ = c.ResponseExcelByFile(c.Ctx, excelMaker)
return
}
... ...