mh_goadmin_server/app/admin/apis/inventorymanage/allot.go

334 lines
9.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package inventorymanage
import (
"errors"
"fmt"
"github.com/gin-gonic/gin"
"go-admin/app/admin/models"
orm "go-admin/common/global"
"go-admin/logger"
"go-admin/tools"
"go-admin/tools/app"
"net/http"
)
// 库存调拨相关代码
// InventoryAllotAdd 新增
// @Summary 新增
// @Tags 库存调拨V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryAllotAddReq true "新增模型"
// @Success 200 {object} models.ErpInventoryAllotOrder
// @Router /api/v1/inventory/allot/add [post]
func InventoryAllotAdd(c *gin.Context) {
req := &models.InventoryAllotAddReq{}
if err := c.ShouldBindJSON(&req); err != nil {
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误:"+err.Error())
return
}
err := tools.Validate(req) //必填参数校验
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
sysUser, err := models.GetSysUserByCtx(c)
if err != nil {
logger.Error("sys user err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
inventoryProductOrder, err := models.AddInventoryAllot(req, sysUser)
if err != nil {
logger.Error("InventoryAllotAdd err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "新增失败:"+err.Error())
return
}
app.OK(c, inventoryProductOrder, "新增成功")
return
}
// InventoryAllotEdit 编辑
// @Summary 编辑
// @Tags 库存调拨V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryAllotEditReq true "编辑模型"
// @Success 200 {object} models.ErpInventoryAllotOrder
// @Router /api/v1/inventory/allot/edit [post]
func InventoryAllotEdit(c *gin.Context) {
req := &models.InventoryAllotEditReq{}
if err := c.ShouldBindJSON(&req); err != nil {
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误:"+err.Error())
return
}
err := tools.Validate(req) //必填参数校验
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
inventoryProductOrder, err := models.EditAllotInventory(req)
if err != nil {
logger.Error("InventoryAllotEdit err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "编辑失败:"+err.Error())
return
}
app.OK(c, inventoryProductOrder, "编辑成功")
return
}
// InventoryAllotAudit 审核
// @Summary 审核
// @Tags 库存调拨V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryAllotAuditReq true "审核模型"
// @Success 200 {object} app.Response
// @Router /api/v1/inventory/allot/audit [post]
func InventoryAllotAudit(c *gin.Context) {
req := &models.InventoryAllotAuditReq{}
if err := c.ShouldBindJSON(&req); err != nil {
//logger.Error(err)
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误:"+err.Error())
return
}
sysUser, err := models.GetSysUserByCtx(c)
if err != nil {
logger.Error("sys user err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
err = models.AuditAllotInventory(req, sysUser)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
return
}
app.OK(c, nil, "操作成功")
return
}
// InventoryAllotDelete 删除
// @Summary 删除
// @Tags 库存调拨V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryAllotDeleteReq true "删除模型"
// @Success 200 {object} app.Response
// @Router /api/v1/inventory/allot/delete [post]
func InventoryAllotDelete(c *gin.Context) {
req := &models.InventoryAllotDeleteReq{}
if err := c.ShouldBindJSON(&req); err != nil {
//logger.Error(err)
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误:"+err.Error())
return
}
err := tools.Validate(req) //必填参数校验
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
// todo 需要校验当前用户是否有权限
var inventoryAllotOrder models.ErpInventoryAllotOrder
err = orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number = ?", req.SerialNumber).
Find(&inventoryAllotOrder).Error
if err != nil {
logger.Error("order err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "删除失败:"+err.Error())
return
}
if inventoryAllotOrder.SerialNumber == "" {
logger.Error("order is null")
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
return
}
// 仅待审核订单可删除
if inventoryAllotOrder.State != models.ErpInventoryAllotOrderUnAudit {
logger.Error("order err, inventoryAllotOrder.State is:", logger.Field("inventoryAllotOrder.State",
inventoryAllotOrder.State))
app.Error(c, http.StatusInternalServerError, err, "删除失败:仅待审核订单可删除")
return
}
begin := orm.Eloquent.Begin()
// 1-删除采购订单表
err = begin.Delete(inventoryAllotOrder).Error
if err != nil {
logger.Error("order delete1 err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "删除失败:"+err.Error())
return
}
// 2-删除采购订单商品表
var commodities []models.ErpInventoryAllotCommodity
err = orm.Eloquent.Table("erp_inventory_allot_commodity").Where("allot_order_id = ?",
inventoryAllotOrder.ID).Find(&commodities).Error
if err != nil {
logger.Error("query erp_inventory_allot_commodity err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "删除失败:"+err.Error())
return
}
if len(commodities) != 0 {
err = begin.Delete(&commodities).Error
if err != nil {
logger.Error("更新商品订单信息-删除 error")
app.Error(c, http.StatusInternalServerError, err, "删除失败:"+err.Error())
return
}
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", logger.Field("err", err))
return
}
app.OK(c, nil, "删除成功")
return
}
// InventoryAllotList 库存调拨列表
// @Summary 库存调拨列表
// @Tags 库存调拨V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryAllotListReq true "库存调拨列表模型"
// @Success 200 {object} models.InventoryAllotListResp
// @Router /api/v1/inventory/allot/list [post]
func InventoryAllotList(c *gin.Context) {
req := &models.InventoryAllotListReq{}
if err := c.ShouldBindJSON(&req); err != nil {
//logger.Error(err)
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误:"+err.Error())
return
}
resp, err := req.List()
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error())
return
}
app.OK(c, resp, "查询成功")
return
}
// InventoryAllotDetail 库存调拨详情
// @Summary 库存调拨详情
// @Tags 库存调拨V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryAllotDetailReq true "库存调拨详情模型"
// @Success 200 {object} models.ErpInventoryAllotOrder
// @Router /api/v1/inventory/allot/detail [post]
func InventoryAllotDetail(c *gin.Context) {
req := &models.InventoryAllotDetailReq{}
if err := c.ShouldBindJSON(&req); err != nil {
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误:"+err.Error())
return
}
var allotOrder models.ErpInventoryAllotOrder
err := orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number=?", req.SerialNumber).Find(&allotOrder).Error
if err != nil {
logger.Error("allot order err:", logger.Field("err", err))
app.Error(c, http.StatusBadRequest, err, "获取失败")
return
}
if allotOrder.ID == 0 {
logger.Error("allot commodities err:", logger.Field("err", err))
app.Error(c, http.StatusBadRequest, err, fmt.Sprintf("未查询到订单[%s]", req.SerialNumber))
return
}
// 校验时间如果为01-01-01 08:05则赋值为空
if allotOrder.MakerTime != nil && allotOrder.MakerTime.IsZero() {
allotOrder.MakerTime = nil
}
if allotOrder.AuditTime != nil && allotOrder.AuditTime.IsZero() {
allotOrder.AuditTime = nil
}
var allotCommodities []models.ErpInventoryAllotCommodity
err = orm.Eloquent.Table("erp_inventory_allot_commodity").Where("allot_order_id=?", allotOrder.ID).
Find(&allotCommodities).Error
if err != nil {
logger.Error("allot commodities err:", logger.Field("err", err))
app.Error(c, http.StatusBadRequest, err, "获取失败")
return
}
allotOrder.Commodities = allotCommodities
app.OK(c, allotOrder, "查询成功")
return
}
// InventoryAllotDeliver 调拨发货
// @Summary 调拨发货
// @Tags 库存调拨V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryAllotDeliverReq true "调拨发货模型"
// @Success 200 {object} app.Response
// @Router /api/v1/inventory/allot/deliver [post]
func InventoryAllotDeliver(c *gin.Context) {
req := &models.InventoryAllotDeliverReq{}
if err := c.ShouldBindJSON(&req); err != nil {
//logger.Error(err)
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误:"+err.Error())
return
}
err := models.DeliverAllotInventory(req)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "操作失败:"+err.Error())
return
}
app.OK(c, nil, "操作成功")
return
}
// InventoryAllotReceive 调拨收货
// @Summary 调拨收货
// @Tags 库存调拨V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryAllotReceiveReq true "调拨收货模型"
// @Success 200 {object} app.Response
// @Router /api/v1/inventory/allot/receive [post]
func InventoryAllotReceive(c *gin.Context) {
req := &models.InventoryAllotReceiveReq{}
if err := c.ShouldBindJSON(&req); err != nil {
//logger.Error(err)
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误:"+err.Error())
return
}
err := models.ReceiveAllotInventory(req)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "操作失败:"+err.Error())
return
}
app.OK(c, nil, "操作成功")
return
}