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

283 lines
8.4 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"
)
// 库存变动相关代码
// InventoryChangeAdd 新增
// @Summary 新增
// @Tags 库存变动V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryChangeAddReq true "新增模型"
// @Success 200 {object} models.ErpInventoryChangeOrder
// @Router /api/v1/inventory/change/add [post]
func InventoryChangeAdd(c *gin.Context) {
req := &models.InventoryChangeAddReq{}
if err := c.ShouldBindJSON(&req); err != nil {
app.Error(c, http.StatusBadRequest, errors.New("param 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
}
changeProductOrder, err := models.AddInventoryChange(req, sysUser)
if err != nil {
logger.Error("InventoryChangeAdd err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "新增失败:"+err.Error())
return
}
app.OK(c, changeProductOrder, "新增成功")
return
}
// InventoryChangeEdit 编辑
// @Summary 编辑
// @Tags 库存变动V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryChangeEditReq true "编辑模型"
// @Success 200 {object} models.ErpInventoryChangeOrder
// @Router /api/v1/inventory/change/edit [post]
func InventoryChangeEdit(c *gin.Context) {
req := &models.InventoryChangeEditReq{}
if err := c.ShouldBindJSON(&req); err != nil {
app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误:"+err.Error())
return
}
err := tools.Validate(req) //必填参数校验
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
changeProductOrder, err := models.EditChangeInventory(req)
if err != nil {
logger.Error("InventoryChangeEdit err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "编辑失败:"+err.Error())
return
}
app.OK(c, changeProductOrder, "编辑成功")
return
}
// InventoryChangeAudit 审核
// @Summary 审核
// @Tags 库存变动V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryChangeAuditReq true "审核模型"
// @Success 200 {object} app.Response
// @Router /api/v1/inventory/change/audit [post]
func InventoryChangeAudit(c *gin.Context) {
req := &models.InventoryChangeAuditReq{}
if err := c.ShouldBindJSON(&req); err != nil {
//logger.Error(err)
app.Error(c, http.StatusBadRequest, errors.New("param 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.AuditChangeInventory(req, sysUser)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
return
}
app.OK(c, nil, "操作成功")
return
}
// InventoryChangeDelete 删除
// @Summary 删除
// @Tags 库存变动V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryChangeDeleteReq true "删除模型"
// @Success 200 {object} app.Response
// @Router /api/v1/inventory/change/delete [post]
func InventoryChangeDelete(c *gin.Context) {
req := &models.InventoryChangeDeleteReq{}
if err := c.ShouldBindJSON(&req); err != nil {
//logger.Error(err)
app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误")
return
}
err := tools.Validate(req) //必填参数校验
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
// todo 需要校验当前用户是否有权限
var inventoryChangeOrder models.ErpInventoryChangeOrder
err = orm.Eloquent.Table("erp_inventory_change_order").Where("serial_number = ?", req.SerialNumber).
Find(&inventoryChangeOrder).Error
if err != nil {
logger.Error("order err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "删除失败:"+err.Error())
return
}
if inventoryChangeOrder.SerialNumber == "" {
logger.Error("order is null")
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
return
}
// 仅待审核订单可删除
if inventoryChangeOrder.State != models.ErpInventoryChangeOrderUnAudit {
logger.Error("order err, inventoryChangeOrder.State is:", logger.Field("inventoryChangeOrder.State",
inventoryChangeOrder.State))
app.Error(c, http.StatusInternalServerError, err, "删除失败:仅待审核订单可删除")
return
}
begin := orm.Eloquent.Begin()
// 1-删除采购订单表
err = begin.Delete(inventoryChangeOrder).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.ErpInventoryChangeCommodity
err = orm.Eloquent.Table("erp_inventory_change_commodity").Where("change_order_id = ?",
inventoryChangeOrder.ID).Find(&commodities).Error
if err != nil {
logger.Error("query erp_inventory_change_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
}
// InventoryChangeList 库存变动列表
// @Summary 库存变动列表
// @Tags 库存变动V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryChangeListReq true "库存变动列表模型"
// @Success 200 {object} models.InventoryChangeListResp
// @Router /api/v1/inventory/change/list [post]
func InventoryChangeList(c *gin.Context) {
req := &models.InventoryChangeListReq{}
if err := c.ShouldBindJSON(&req); err != nil {
//logger.Error(err)
app.Error(c, http.StatusBadRequest, errors.New("param 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
}
// InventoryChangeDetail 库存变动详情
// @Summary 库存变动详情
// @Tags 库存变动V1.4.0
// @Produce json
// @Accept json
// @Param request body models.InventoryChangeDetailReq true "库存变动详情模型"
// @Success 200 {object} models.ErpInventoryChangeOrder
// @Router /api/v1/inventory/change/detail [post]
func InventoryChangeDetail(c *gin.Context) {
req := &models.InventoryChangeDetailReq{}
if err := c.ShouldBindJSON(&req); err != nil {
app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误:"+err.Error())
return
}
var changeOrder models.ErpInventoryChangeOrder
err := orm.Eloquent.Table("erp_inventory_change_order").Where("serial_number=?", req.SerialNumber).
Find(&changeOrder).Error
if err != nil {
logger.Error("change order err:", logger.Field("err", err))
app.Error(c, http.StatusBadRequest, err, "获取失败")
return
}
if changeOrder.ID == 0 {
logger.Error("change commodities err:", logger.Field("err", err))
app.Error(c, http.StatusBadRequest, err, fmt.Sprintf("未查询到订单[%s]", req.SerialNumber))
return
}
// 校验时间如果为01-01-01 08:05则赋值为空
if changeOrder.MakerTime != nil && changeOrder.MakerTime.IsZero() {
changeOrder.MakerTime = nil
}
if changeOrder.AuditTime != nil && changeOrder.AuditTime.IsZero() {
changeOrder.AuditTime = nil
}
var changeCommodities []models.ErpInventoryChangeCommodity
err = orm.Eloquent.Table("erp_inventory_change_commodity").Where("change_order_id=?", changeOrder.ID).
Find(&changeCommodities).Error
if err != nil {
logger.Error("change commodities err:", logger.Field("err", err))
app.Error(c, http.StatusBadRequest, err, "获取失败")
return
}
changeOrder.Commodities = changeCommodities
app.OK(c, changeOrder, "查询成功")
return
}