You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
5.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package gysretreat
import (
"errors"
"fmt"
mysql2 "git.oa00.com/go/mysql"
"github.com/golangkit/formatime"
"gorm.io/gorm"
"recook/internal/libs/bean"
"recook/internal/v2/model/gys/enterprise"
"recook/internal/v2/model/gys/gys_retreat"
"recook/internal/v2/model/recook/goods"
"recook/internal/v2/model/recook/message"
"sync"
"time"
)
type retreatLogic struct {
}
var RetreatLogic = &retreatLogic{}
/*逻辑层模块*/
func (l retreatLogic) Add(id uint) error {
var gys enterprise.GysEnterpriseStateModel
mysql2.Db.Table(gys.TableName()).Where("user_id=?", id).First(&gys)
if gys.Id == 0 {
return errors.New("请传入正确的供应商id")
}
//开启事务
err := mysql2.Db.Transaction(func(tx *gorm.DB) error {
//下架该供应商的全部商品
if err := tx.Table((&goods.RecookGoodsInfoModel{}).TableName()).Where("vendor_id=?", id).Update("publish_status", 0).Error; err != nil {
return err
}
//给消息中心发送消息,通知供应商退驻
mes := message.AllMessage{
Title: "供应商:" + gys.EnterpriseName + "发起退驻",
Time: time.Now(),
GysId: id,
Type: 6,
Read: 2,
DetailId: id,
ChildType: 0,
ManageRead: 0,
}
if err := tx.Create(&mes).Error; err != nil {
return err
}
//在供应商退驻表中填写资料,存入
retreat := gys_retreat.GysRetreatModel{
GysId: id,
GysName: gys.EnterpriseName,
ContractNo: gys.ContractNo,
GysCode: gys.GysCode,
CreateTime: formatime.NewSecondNow(),
}
if err := tx.Create(&retreat).Error; err != nil {
return err
}
return nil
})
if err != nil {
return err
}
return nil
}
//显示供应商退驻列表
func (l retreatLogic) List(name string, no string, code string, startTime string, endTime string, page bean.Page, state uint) (rest []gys_retreat.GysRetreatModel, total int64, err error) {
where := mysql2.Db
timeTap := "2006-01-02 15:04:05"
if state == 0 {
return nil, 0, errors.New("状态必传")
}
if name != "" {
where = where.Where("gys_name like ?", fmt.Sprintf("%%%s%%", name))
}
if no != "" {
where = where.Where("contract_no =?", no)
}
if code != "" {
where = where.Where("gys_code=?", code)
}
if startTime != "" && endTime != "" {
t1, _ := time.ParseInLocation(timeTap, startTime, time.Local)
t2, _ := time.ParseInLocation(timeTap, endTime, time.Local)
where = where.Where("create_time between ? and ?", t1, t2)
}
if state == 1 { //待各部门审核
where = where.Where("(procurement_audit+financial_audit+logistics_audit+customer_audit+operation_audit)<5")
}
if state == 2 { //待管理部门审核
where = where.Where("(procurement_audit+financial_audit+logistics_audit+customer_audit+operation_audit)=5 and management_audit=?", 0)
}
if state == 3 { //退驻的
where = where.Where("end_type=?", 1)
}
mysql2.Db.Table((&gys_retreat.GysRetreatModel{}).TableName()).Where(where).Limit(page.GetLimit()).Offset(page.GetStart()).Find(&rest)
mysql2.Db.Table((&gys_retreat.GysRetreatModel{}).TableName()).Where(where).Count(&total)
return rest, total, nil
}
//var wg sync.WaitGroup
var lock sync.Mutex
func (l retreatLogic) Examined(state uint, uid uint, id uint) error {
//防止幻读,开启线程锁
lock.Lock()
defer lock.Unlock()
//审核内容
if state == 0 || uid == 0 {
return errors.New("审核者id和审核状态为必填项")
}
var p gys_retreat.GysRetreatModel
mysql2.Db.Table(p.TableName()).Where("id=?", id).First(&p)
if p.Id == 0 {
return errors.New("传入id有误")
}
if state == 1 {
//采购审核
var retreat = gys_retreat.GysRetreatModel{
ProcurementAudit: 1,
ProcurementId: uid,
ProcurementTime: formatime.NewSecondNow(),
}
//更新
e := mysql2.Db.Table(retreat.TableName()).Where("id=?", id).Updates(&retreat).Error
if e != nil {
return e
}
}
if state == 2 {
//财务审核
var retreat = gys_retreat.GysRetreatModel{
FinancialAudit: 1,
FinancialId: uid,
FinancialTime: formatime.NewSecondNow(),
}
//更新
e := mysql2.Db.Table(retreat.TableName()).Where("id=?", id).Updates(&retreat).Error
if e != nil {
return e
}
}
if state == 3 {
//物流审核
var retreat = gys_retreat.GysRetreatModel{
LogisticsAudit: 1,
LogisticsId: uid,
LogisticsTime: formatime.NewSecondNow(),
}
//更新
e := mysql2.Db.Table(retreat.TableName()).Where("id=?", id).Updates(&retreat).Error
if e != nil {
return e
}
}
if state == 4 {
//客服审核
var retreat = gys_retreat.GysRetreatModel{
CustomerAudit: 1,
CustomerId: uid,
CustomerTime: formatime.NewSecondNow(),
}
//更新
e := mysql2.Db.Table(retreat.TableName()).Where("id=?", id).Updates(&retreat).Error
if e != nil {
return e
}
}
if state == 5 {
//运营审核
var retreat = gys_retreat.GysRetreatModel{
OperationAudit: 1,
OperationId: uid,
OperationTime: formatime.NewSecondNow(),
}
//更新
e := mysql2.Db.Table(retreat.TableName()).Where("id=?", id).Updates(&retreat).Error
if e != nil {
return e
}
}
if state == 6 {
//管理审核 ,最终passend_type变成1
var retreat = gys_retreat.GysRetreatModel{
ManagementAudit: 1,
ManagementId: uid,
ManagementTime: formatime.NewSecondNow(),
EndType: 1,
}
//更新
e := mysql2.Db.Table(retreat.TableName()).Where("id=?", id).Updates(&retreat).Error
if e != nil {
return e
}
}
return nil
}