package controllers
|
|
import (
|
"github.com/gin-gonic/gin"
|
"github.com/shopspring/decimal"
|
"gorm.io/gorm"
|
"outsourcing/constvar"
|
"outsourcing/extend/code"
|
"outsourcing/extend/util"
|
"outsourcing/models"
|
"outsourcing/pkg/structx"
|
"outsourcing/request"
|
)
|
|
type OrderController struct{}
|
|
// OutsourcingOrderList
|
// @Tags 订单管理
|
// @Summary 委外订单列表
|
// @Produce application/json
|
// @Param object query request.OutsourcingOrderList true "查询参数"
|
// @Success 200 {object} util.ResponseList{data=[]models.OutsourcingOrder} "成功"
|
// @Router /api-outsourcing/v1/order/list [get]
|
func (slf *OrderController) OutsourcingOrderList(c *gin.Context) {
|
var params request.OutsourcingOrderList
|
if err := c.BindQuery(¶ms); err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
|
return
|
}
|
list, total, err := models.NewOutsourcingOrderSearch().SetPage(params.Page, params.PageSize).SetKeyword(params.Keyword).SetOrder("id desc").Find()
|
if err != nil {
|
util.ResponseFormat(c, code.InternalError, "查询错误")
|
return
|
}
|
util.ResponseFormatList(c, code.Success, list, int(total))
|
}
|
|
// OrderOverview
|
// @Tags 订单管理
|
// @Summary 订单统计
|
// @Produce application/json
|
// @Success 200 {object} util.ResponseList{data=request.OutsourcingOrderOverview} "成功"
|
// @Router /api-outsourcing/v1/order/overview [get]
|
func (slf *OrderController) OrderOverview(c *gin.Context) {
|
result, err := models.NewOutsourcingOrderSearch().CountGroupByStatus()
|
if err != nil {
|
util.ResponseFormat(c, code.InternalError, "查询错误")
|
return
|
}
|
resp := &request.OutsourcingOrderOverview{}
|
for _, v := range result {
|
resp.Total += v.Total
|
status := constvar.OutsourcingOrderStatus(v.Status)
|
if status == constvar.OutsourcingOrderStatusCreate {
|
resp.WaitAssigned += v.Total
|
} else {
|
resp.HasAssigned += v.Total
|
}
|
}
|
util.ResponseFormat(c, code.Success, resp)
|
}
|
|
// OutsourcingOrderProductList
|
// @Tags 订单管理
|
// @Summary 委外订单产品列表
|
// @Produce application/json
|
// @Param object query request.OutsourcingOrderProductList true "查询参数"
|
// @Success 200 {object} util.ResponseList{data=[]models.OutsourcingOrderProduct} "成功"
|
// @Router /api-outsourcing/v1/order/productList [get]
|
func (slf *OrderController) OutsourcingOrderProductList(c *gin.Context) {
|
var params request.OutsourcingOrderProductList
|
if err := c.BindQuery(¶ms); err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
|
return
|
}
|
if params.OutsourcingOrderId == 0 {
|
util.ResponseFormat(c, code.RequestParamError, "参数缺失")
|
return
|
}
|
list, total, err := models.NewOutsourcingOrderProductSearch().SetPage(params.Page, params.PageSize).SetOutsourcingOrderID(params.OutsourcingOrderId).SetOrder("id desc").Find()
|
if err != nil {
|
util.ResponseFormat(c, code.InternalError, "查询错误")
|
return
|
}
|
util.ResponseFormatList(c, code.Success, list, int(total))
|
}
|
|
// SaveMaterialApply
|
// @Tags 订单管理
|
// @Summary 保存物料申请单
|
// @Produce application/json
|
// @Param object body request.SaveMaterialApply true "参数"
|
// @Success 200 {object} util.Response{} "成功"
|
// @Router /api-outsourcing/v1/order/saveMaterialApply [post]
|
func (slf *OrderController) SaveMaterialApply(c *gin.Context) {
|
var params request.SaveMaterialApply
|
if err := c.BindJSON(¶ms); err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
|
return
|
}
|
if len(params.ApplyList) == 0 {
|
util.ResponseFormat(c, code.RequestParamError, "物料申请不能为空")
|
return
|
}
|
var apply []*models.OutsourcingMaterialApply
|
err := structx.AssignTo(params.ApplyList, &apply)
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "数据转换失败")
|
return
|
}
|
err = models.WithTransaction(func(db *gorm.DB) error {
|
err = models.NewOutsourcingMaterialApplySearch().SetOrm(db).CreateBatch(apply)
|
if err != nil {
|
return err
|
}
|
err = models.NewOutsourcingOrderSearch().SetOrm(db).SetNumber(params.ApplyList[0].OutsourcingOrderNumber).
|
UpdateByMap(map[string]interface{}{"status": constvar.OutsourcingOrderStatusMaterialApplying})
|
return err
|
})
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "保存失败")
|
return
|
}
|
|
util.ResponseFormat(c, code.Success, "保存成功")
|
}
|
|
// GetMaterialApplyList
|
// @Tags 订单管理
|
// @Summary 获取物料申请单
|
// @Produce application/json
|
// @Param object body request.GetMaterialApplyList true "参数"
|
// @Success 200 {object} util.ResponseList{[]models.OutsourcingMaterialApply} "成功"
|
// @Router /api-outsourcing/v1/order/getMaterialApplyList [post]
|
func (slf *OrderController) GetMaterialApplyList(c *gin.Context) {
|
var params request.GetMaterialApplyList
|
if err := c.BindJSON(¶ms); err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
|
return
|
}
|
find, err := models.NewOutsourcingMaterialApplySearch().SetOutsourcingOrderNumber(params.Number).FindNotTotal()
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "查询失败")
|
return
|
}
|
util.ResponseFormat(c, code.Success, find)
|
}
|
|
// ChangeStatus
|
// @Tags 订单管理
|
// @Summary 修改状态
|
// @Produce application/json
|
// @Param object body request.ChangeStatus true "参数"
|
// @Success 200 {object} util.Response "成功"
|
// @Router /api-outsourcing/v1/order/changeStatus [post]
|
func (slf *OrderController) ChangeStatus(c *gin.Context) {
|
var params request.ChangeStatus
|
if err := c.BindJSON(¶ms); err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
|
return
|
}
|
//限定状态参数
|
if params.Status == constvar.OutsourcingOrderStatusCreate || //取消确认
|
params.Status == constvar.OutsourcingOrderStatusWaitProduce || //确认接受
|
params.Status == constvar.OutsourcingOrderStatusFinish || //生产完成
|
params.Status == constvar.OutsourcingOrderStatusDeliveryFinish { //发货完成
|
m := make(map[string]interface{})
|
m["status"] = params.Status
|
m["reason"] = params.Reason
|
err := models.NewOutsourcingOrderSearch().SetNumber(params.OutsourcingOrderNumber).UpdateByMap(m)
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "状态更新失败")
|
return
|
}
|
util.ResponseFormat(c, code.Success, "状态更新成功")
|
return
|
}
|
util.ResponseFormat(c, code.RequestParamError, "状态参数不正确")
|
}
|
|
// DeliveryPrepare
|
// @Tags 订单管理
|
// @Summary 发货准备
|
// @Produce application/json
|
// @Param object query request.DeliveryPrepare true "参数"
|
// @Success 200 {object} util.Response{} "成功"
|
// @Router /api-outsourcing/v1/order/deliveryPrepare [get]
|
func (slf *OrderController) DeliveryPrepare(c *gin.Context) {
|
var params request.DeliveryPrepare
|
if err := c.BindQuery(¶ms); err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
|
return
|
}
|
if params.OutsourcingOrderID == 0 {
|
util.ResponseFormat(c, code.RequestParamError, "参数缺失")
|
return
|
}
|
|
orderProducts, err := models.NewOutsourcingOrderProductSearch().SetOutsourcingOrderID(params.OutsourcingOrderID).FindNotTotal()
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "查询订单产品列表失败")
|
return
|
}
|
deliveryDetails, err := models.NewOutsourcingOrderDeliveryDetailsSearch().SetOutsourcingOrderID(params.OutsourcingOrderID).FindNotTotal()
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "查询订单产品发货明细失败")
|
return
|
}
|
deliveryMap := make(map[uint]decimal.Decimal)
|
for _, item := range deliveryDetails {
|
deliveryMap[item.OutsourcingOrderProductID] = deliveryMap[item.OutsourcingOrderProductID].Add(item.SendAmount)
|
}
|
for _, v := range orderProducts {
|
v.SendAmount = deliveryMap[v.ID]
|
}
|
util.ResponseFormat(c, code.Success, orderProducts)
|
}
|
|
// SaveDelivery
|
// @Tags 订单管理
|
// @Summary 保存发货信息
|
// @Produce application/json
|
// @Param object body request.SaveDelivery true "参数"
|
// @Success 200 {object} util.Response{} "成功"
|
// @Router /api-outsourcing/v1/order/saveDelivery [post]
|
func (slf *OrderController) SaveDelivery(c *gin.Context) {
|
var params request.SaveDelivery
|
if err := c.BindJSON(¶ms); err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
|
return
|
}
|
if params.OutsourcingOrderID == 0 || params.Number == "" || params.Carrier == "" || params.WaybillNumber == "" {
|
util.ResponseFormat(c, code.RequestParamError, "参数缺失")
|
return
|
}
|
if len(params.DeliveryList) == 0 {
|
util.ResponseFormat(c, code.RequestParamError, "发货列表不能为空")
|
return
|
}
|
|
delivery := &models.OutsourcingOrderDelivery{
|
OutsourcingOrderID: params.OutsourcingOrderID,
|
Number: params.Number,
|
Carrier: params.Carrier,
|
WaybillNumber: params.WaybillNumber,
|
}
|
|
err := models.WithTransaction(func(db *gorm.DB) error {
|
err := models.NewOutsourcingOrderDeliverySearch().SetOrm(db).Create(delivery)
|
if err != nil {
|
return err
|
}
|
items := make([]*models.OutsourcingOrderDeliveryDetails, 0, len(params.DeliveryList))
|
for _, v := range params.DeliveryList {
|
items = append(items, &models.OutsourcingOrderDeliveryDetails{
|
OutsourcingOrderID: params.OutsourcingOrderID,
|
OutsourcingOrderDeliveryID: delivery.ID,
|
OutsourcingOrderProductID: v.OutsourcingOrderProductID,
|
SendAmount: v.SendAmount,
|
})
|
}
|
return models.NewOutsourcingOrderDeliveryDetailsSearch().SetOrm(db).CreateBatch(items)
|
})
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "保存失败")
|
return
|
}
|
|
util.ResponseFormat(c, code.Success, "保存成功")
|
}
|
|
// GetDeliveryList
|
// @Tags 订单管理
|
// @Summary 获取发货列表
|
// @Produce application/json
|
// @Param object body request.GetDeliveryList true "参数"
|
// @Success 200 {object} util.ResponseList{[]models.OutsourcingOrderDeliveryDetails} "成功"
|
// @Router /api-outsourcing/v1/order/deliveryList [post]
|
func (slf *OrderController) GetDeliveryList(c *gin.Context) {
|
var params request.GetDeliveryList
|
if err := c.BindJSON(¶ms); err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
|
return
|
}
|
list, err := models.NewOutsourcingOrderDeliveryDetailsSearch().SetOutsourcingOrderID(params.OutsourcingOrderID).SetPreload(true).FindNotTotal()
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "查询失败")
|
return
|
}
|
util.ResponseFormat(c, code.Success, list)
|
}
|