364 lines
12 KiB
Go
364 lines
12 KiB
Go
package purchasemanage
|
||
|
||
import (
|
||
"errors"
|
||
"github.com/gin-gonic/gin"
|
||
model "go-admin/app/admin/models"
|
||
orm "go-admin/common/global"
|
||
"go-admin/logger"
|
||
"go-admin/tools"
|
||
"go-admin/tools/app"
|
||
"net/http"
|
||
"time"
|
||
)
|
||
|
||
// ErpPurchaseChangeCreate 采购换机-新增
|
||
// @Summary 采购换机-新增
|
||
// @Tags 采购换机, V1.4.5
|
||
// @Produce json
|
||
// @Accept json
|
||
// @Param request body models.ErpPurchaseChangeCreateReq true "采购换机-新增模型"
|
||
// @Success 200 {object} models.ErpPurchaseChangeOrder
|
||
// @Router /api/v1/erp_purchase/change/create [post]
|
||
func ErpPurchaseChangeCreate(c *gin.Context) {
|
||
req := new(model.ErpPurchaseChangeCreateReq)
|
||
if err := c.ShouldBindJSON(&req); err != nil {
|
||
logger.Error("ShouldBindJSON err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误"+err.Error())
|
||
return
|
||
}
|
||
sysUser, err := model.GetSysUserByCtx(c)
|
||
if err != nil {
|
||
logger.Error("sys user err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, "操作失败")
|
||
return
|
||
}
|
||
|
||
// 检验参数
|
||
err = model.CheckCreateErpPurchaseChangeOrderParam(req)
|
||
if err != nil {
|
||
logger.Error("CheckCreateErpPurchaseOrderParam err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, err.Error())
|
||
return
|
||
}
|
||
|
||
if len(req.Commodities) == 0 {
|
||
logger.Error("erp purchase change commodities is nil")
|
||
app.Error(c, http.StatusInternalServerError, err, "操作失败:未添加商品")
|
||
return
|
||
}
|
||
|
||
// 校验入参门店是否包含在用户所有门店中,是否过期
|
||
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||
if !model.CheckUserStore(req.StoreId, sysUser) {
|
||
app.Error(c, http.StatusInternalServerError, errors.New("操作失败:您没有该门店权限"), "操作失败:您没有该门店权限")
|
||
return
|
||
}
|
||
}
|
||
|
||
purchaseOrder, err := model.CreateErpPurchaseChangeOrder(req, sysUser)
|
||
if err != nil {
|
||
logger.Error("CreateErpPurchaseOrder err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, "新增失败:"+err.Error())
|
||
return
|
||
}
|
||
|
||
purchaseOrder.Commodities = req.Commodities
|
||
|
||
app.OK(c, purchaseOrder, "")
|
||
return
|
||
}
|
||
|
||
// ErpPurchaseChangeEdit 采购换机-编辑
|
||
// @Summary 采购换机-编辑
|
||
// @Tags 采购换机, V1.4.5
|
||
// @Produce json
|
||
// @Accept json
|
||
// @Param request body models.ErpPurchaseChangeEditReq true "采购换机-编辑模型"
|
||
// @Success 200 {object} models.ErpPurchaseChangeOrder
|
||
// @Router /api/v1/erp_purchase/change/edit [post]
|
||
func ErpPurchaseChangeEdit(c *gin.Context) {
|
||
req := new(model.ErpPurchaseChangeEditReq)
|
||
if err := c.ShouldBindJSON(&req); err != nil {
|
||
logger.Error("ShouldBindJSON err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误"+err.Error())
|
||
return
|
||
}
|
||
|
||
sysUser, err := model.GetSysUserByCtx(c)
|
||
if err != nil {
|
||
logger.Error("sys user err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, "操作失败")
|
||
return
|
||
}
|
||
|
||
// 检验参数
|
||
err = model.CheckEditErpPurchaseChangeOrderParam(req)
|
||
if err != nil {
|
||
logger.Error("CheckEditErpPurchaseChangeOrderParam err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, err.Error())
|
||
return
|
||
}
|
||
|
||
if len(req.Commodities) == 0 {
|
||
logger.Error("erp purchase change commodities is nil")
|
||
app.Error(c, http.StatusInternalServerError, err, "操作失败")
|
||
return
|
||
}
|
||
|
||
// 校验入参门店是否包含在用户所有门店中,是否过期
|
||
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||
if !model.CheckUserStore(req.StoreId, sysUser) {
|
||
app.Error(c, http.StatusInternalServerError, errors.New("操作失败:您没有该门店权限"), "操作失败:您没有该门店权限")
|
||
return
|
||
}
|
||
}
|
||
|
||
// 更新订单信息
|
||
purchaseOrder, err := model.EditErpPurchaseChangeOrder(req, sysUser)
|
||
if err != nil {
|
||
logger.Error("EditErpPurchaseChangeOrder err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, "编辑失败:"+err.Error())
|
||
return
|
||
}
|
||
|
||
purchaseOrder.Commodities = req.Commodities
|
||
app.OK(c, purchaseOrder, "")
|
||
return
|
||
}
|
||
|
||
// ErpPurchaseChangeList 采购换机-列表
|
||
// @Summary 采购换机-列表
|
||
// @Tags 采购换机, V1.4.5
|
||
// @Produce json
|
||
// @Accept json
|
||
// @Param request body models.ErpPurchaseChangeOrderListReq true "采购换机列表模型"
|
||
// @Success 200 {object} models.ErpPurchaseChangeOrderListResp
|
||
// @Router /api/v1/erp_purchase/change/list [post]
|
||
func ErpPurchaseChangeList(c *gin.Context) {
|
||
req := &model.ErpPurchaseChangeOrderListReq{}
|
||
if err := c.ShouldBindJSON(&req); err != nil {
|
||
logger.Error("ShouldBindJSON err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
|
||
return
|
||
}
|
||
|
||
resp, err := req.List(c)
|
||
if err != nil {
|
||
logger.Error("ErpPurchaseChangeList err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, "获取失败"+err.Error())
|
||
return
|
||
}
|
||
|
||
app.OK(c, resp, "")
|
||
return
|
||
}
|
||
|
||
// ErpPurchaseChangeDelete 采购换机-删除
|
||
// @Summary 采购换机-删除
|
||
// @Tags 采购换机, V1.4.5
|
||
// @Produce json
|
||
// @Accept json
|
||
// @Param request body models.ErpPurchaseChangeDeleteReq true "采购换机-删除模型"
|
||
// @Success 200 {object} app.Response
|
||
// @Router /api/v1/erp_purchase/change/delete [post]
|
||
func ErpPurchaseChangeDelete(c *gin.Context) {
|
||
var req = new(model.ErpPurchaseChangeDeleteReq)
|
||
if err := c.ShouldBindJSON(&req); err != nil {
|
||
logger.Error("ShouldBindJSON err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusBadRequest, err, "参数错误:"+err.Error())
|
||
return
|
||
}
|
||
|
||
err := tools.Validate(req) //必填参数校验
|
||
if err != nil {
|
||
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||
return
|
||
}
|
||
|
||
sysUser, err := model.GetSysUserByCtx(c)
|
||
if err != nil {
|
||
logger.Error("sys user err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, "操作失败")
|
||
return
|
||
}
|
||
|
||
var erpPurchaseChangeOrder model.ErpPurchaseChangeOrder
|
||
err = orm.Eloquent.Table("erp_purchase_change_order").Where("serial_number = ?", req.SerialNumber).Find(&erpPurchaseChangeOrder).Error
|
||
if err != nil {
|
||
logger.Error("order err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, "删除失败:"+err.Error())
|
||
return
|
||
}
|
||
|
||
// 校验入参门店是否包含在用户所有门店中,是否过期
|
||
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||
if !model.CheckUserStore(erpPurchaseChangeOrder.StoreId, sysUser) {
|
||
app.Error(c, http.StatusInternalServerError, errors.New("操作失败:您没有该门店权限"), "操作失败:您没有该门店权限")
|
||
return
|
||
}
|
||
}
|
||
|
||
if erpPurchaseChangeOrder.SerialNumber == "" {
|
||
logger.Error("order is null")
|
||
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
|
||
return
|
||
}
|
||
|
||
// 仅待审核订单可删除
|
||
if erpPurchaseChangeOrder.State != model.ErpPurchaseChangeOrderUnAudit {
|
||
logger.Error("order err, erpPurchaseChangeOrder.State is:", logger.Field("erpPurchaseChangeOrder.State", erpPurchaseChangeOrder.State))
|
||
app.Error(c, http.StatusInternalServerError, err, "删除失败:仅待审核订单可删除")
|
||
return
|
||
}
|
||
|
||
begin := orm.Eloquent.Begin()
|
||
// 1-删除采购订单表
|
||
err = begin.Delete(erpPurchaseChangeOrder).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 []model.ErpPurchaseChangeCommodity
|
||
err = orm.Eloquent.Table("erp_purchase_change_commodity").Where("change_order_id = ?", erpPurchaseChangeOrder.ID).Find(&commodities).Error
|
||
if err != nil {
|
||
logger.Error("query erp_purchase_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
|
||
}
|
||
|
||
// ErpPurchaseChangeAudit 采购换机-审核
|
||
// @Summary 采购换机-审核
|
||
// @Tags 采购换机, V1.4.5
|
||
// @Produce json
|
||
// @Accept json
|
||
// @Param request body models.ErpPurchaseChangeAuditReq true "采购换机-审核模型"
|
||
// @Success 200 {object} app.Response
|
||
// @Router /api/v1/erp_purchase/change/audit [post]
|
||
func ErpPurchaseChangeAudit(c *gin.Context) {
|
||
var req = new(model.ErpPurchaseChangeAuditReq)
|
||
if err := c.ShouldBindJSON(&req); err != nil {
|
||
logger.Error("ShouldBindJSON err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusBadRequest, err, "参数错误:"+err.Error())
|
||
return
|
||
}
|
||
|
||
err := tools.Validate(req) //必填参数校验
|
||
if err != nil {
|
||
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||
return
|
||
}
|
||
|
||
sysUser, err := model.GetSysUserByCtx(c)
|
||
if err != nil {
|
||
logger.Error("sys user err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, "操作失败")
|
||
return
|
||
}
|
||
|
||
var erpPurchaseChangeOrder model.ErpPurchaseChangeOrder
|
||
err = orm.Eloquent.Table("erp_purchase_change_order").Where("serial_number = ?", req.SerialNumber).
|
||
Find(&erpPurchaseChangeOrder).Error
|
||
if err != nil {
|
||
logger.Error("order err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
|
||
return
|
||
}
|
||
|
||
// 校验入参门店是否包含在用户所有门店中,是否过期
|
||
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||
if !model.CheckUserStore(erpPurchaseChangeOrder.StoreId, sysUser) {
|
||
app.Error(c, http.StatusInternalServerError, errors.New("操作失败:您没有该门店权限"),
|
||
"操作失败:您没有该门店权限")
|
||
return
|
||
}
|
||
}
|
||
|
||
begin := orm.Eloquent.Begin()
|
||
// 判断入参state:1-审核,2-取消审核
|
||
orderState := 0
|
||
switch req.State {
|
||
case 1: // 1-审核:待审核状态可以审核
|
||
if erpPurchaseChangeOrder.State == model.ErpPurchaseChangeOrderUnAudit {
|
||
orderState = model.ErpPurchaseChangeOrderFinished
|
||
} else {
|
||
app.OK(c, nil, "订单已审核")
|
||
return
|
||
}
|
||
case 2: // 2-取消审核:取消后对应的退库或入库
|
||
if erpPurchaseChangeOrder.State == model.ErpPurchaseChangeOrderUnAudit {
|
||
app.OK(c, nil, "订单已取消审核")
|
||
return
|
||
}
|
||
if model.IsMonthEndClosed(*erpPurchaseChangeOrder.AuditTime) {
|
||
app.Error(c, http.StatusInternalServerError, errors.New("反审核失败,财务已月结"),
|
||
"反审核失败,财务已月结")
|
||
return
|
||
}
|
||
|
||
orderState = model.ErpPurchaseChangeOrderUnAudit
|
||
default:
|
||
logger.Error("order err, req.State is:", logger.Field("req.State", req.State))
|
||
app.Error(c, http.StatusInternalServerError, err, "审核失败:参数有误")
|
||
return
|
||
}
|
||
|
||
// 更新库存信息
|
||
// 审核:旧机器出库、新机器入库
|
||
// 反审核:旧机器入库、新机器出库
|
||
err = model.AuditChangeOrder(begin, erpPurchaseChangeOrder, req.State)
|
||
if err != nil {
|
||
begin.Rollback()
|
||
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
|
||
return
|
||
}
|
||
|
||
err = begin.Table("erp_purchase_change_order").Where("id = ?", erpPurchaseChangeOrder.ID).
|
||
Updates(map[string]interface{}{
|
||
"state": orderState,
|
||
"auditor_id": sysUser.UserId,
|
||
"audit_time": time.Now(),
|
||
"auditor_name": sysUser.NickName,
|
||
}).Error
|
||
if err != nil {
|
||
begin.Rollback()
|
||
logger.Error("update erp_purchase_change_order err:", logger.Field("err", err))
|
||
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
|
||
return
|
||
}
|
||
|
||
err = begin.Commit().Error
|
||
if err != nil {
|
||
begin.Rollback()
|
||
logger.Errorf("commit err:", err)
|
||
app.Error(c, http.StatusInternalServerError, err, "审核失败")
|
||
return
|
||
}
|
||
|
||
app.OK(c, nil, "操作成功")
|
||
return
|
||
}
|