583 lines
20 KiB
Go
583 lines
20 KiB
Go
|
package models
|
|||
|
|
|||
|
import (
|
|||
|
"errors"
|
|||
|
"fmt"
|
|||
|
"github.com/gin-gonic/gin"
|
|||
|
orm "go-admin/common/global"
|
|||
|
"go-admin/logger"
|
|||
|
"go-admin/tools"
|
|||
|
"gorm.io/gorm"
|
|||
|
"math/rand"
|
|||
|
"time"
|
|||
|
)
|
|||
|
|
|||
|
const (
|
|||
|
ErpRepairOrderUnAudit = 1 // 待审核
|
|||
|
ErpRepairOrderWaitRepair = 2 // 待送修
|
|||
|
ErpRepairOrderBingRepaired = 3 // 维修中
|
|||
|
ErpRepairOrderFinished = 4 // 已完成
|
|||
|
)
|
|||
|
|
|||
|
type RepairRecord struct {
|
|||
|
Model
|
|||
|
|
|||
|
SerialNumber string `json:"serial_number"` // 订单编号
|
|||
|
Uid uint32 `json:"uid"` // 用户ID
|
|||
|
Tel string `json:"tel"` // 手机号
|
|||
|
MemberLevel uint32 `json:"member_level"` // 会员等级:1-普通用户,6-尊享会员
|
|||
|
StoreId uint32 `json:"store_id"` // 门店ID
|
|||
|
StoreName string `json:"store_name" gorm:"-"` // 门店名称
|
|||
|
HandlerId uint32 `json:"handler_id"` // 经手人ID
|
|||
|
HandlerName string `json:"handler_name"` // 经手人名称
|
|||
|
State uint8 `json:"state"` // 状态(1-待审核,2-待送修,3-维修中,4-已完成)
|
|||
|
MakerId uint32 `json:"maker_id"` // 制单人ID
|
|||
|
MakerName string `json:"maker_name"` // 制单人名称
|
|||
|
MakerTime *time.Time `json:"maker_time"` // 制单时间
|
|||
|
AuditorId uint32 `json:"auditor_id"` // 审核人ID
|
|||
|
AuditorName string `json:"auditor_name"` // 审核人名称
|
|||
|
AuditTime *time.Time `json:"audit_time"` // 审核时间
|
|||
|
SendTime *time.Time `json:"send_time"` // 送修时间
|
|||
|
SendRemark string `json:"send_remark"` // 送修备注
|
|||
|
ExpressNo string `json:"express_no"` // 快递单号
|
|||
|
RepairUnitId uint32 `json:"repair_unit_id"` // 维修单位ID(供应商)
|
|||
|
RepairUnitName string `json:"repair_unit_name" gorm:"-"` // 维修单位名称(供应商)
|
|||
|
RepairFee float64 `json:"repair_fee"` // 维修费用
|
|||
|
CompletedTime *time.Time `json:"completed_time"` // 完成时间
|
|||
|
CompleteRemark string `json:"complete_remark"` // 完成备注
|
|||
|
Commodities []RepairRecordCommodity `json:"commodities" gorm:"-"` // 维修商品信息
|
|||
|
}
|
|||
|
|
|||
|
type RepairRecordCommodity struct {
|
|||
|
Model
|
|||
|
|
|||
|
RepairRecordId uint32 `json:"repair_record_id"` // 维修记录ID
|
|||
|
CommodityId uint32 `json:"commodity_id"` // 商品ID
|
|||
|
CommodityName string `json:"commodity_name" gorm:"-"` // 商品名称
|
|||
|
OldIMEI string `json:"old_imei"` // 旧机器编码
|
|||
|
NewIMEI string `json:"new_imei"` // 新机器编码
|
|||
|
Count uint32 `json:"count"` // 数量
|
|||
|
FaultImage string `json:"fault_image"` // 故障图片
|
|||
|
FaultDesc string `json:"fault_desc"` // 故障描述
|
|||
|
}
|
|||
|
|
|||
|
type RepairCreateReq struct {
|
|||
|
Uid uint32 `json:"uid"`
|
|||
|
Tel string `json:"tel"`
|
|||
|
StoreId uint32 `json:"store_id" binding:"required"`
|
|||
|
HandlerId uint32 `json:"handler_id" binding:"required"` // 经手人id
|
|||
|
HandlerName string `json:"handler_name"` // 经手人名称
|
|||
|
Commodities []RepairRecordCommodity `json:"commodities"`
|
|||
|
}
|
|||
|
|
|||
|
type RepairEditReq struct {
|
|||
|
SerialNumber string `json:"serial_number" binding:"required"` // 订单编号
|
|||
|
Uid uint32 `json:"uid"` // 用户ID
|
|||
|
Tel string `json:"tel"` // 手机号
|
|||
|
MemberLevel uint32 `json:"member_level"` // 会员等级:普通用户、尊享会员
|
|||
|
StoreId uint32 `json:"store_id" binding:"required"` // 门店ID
|
|||
|
HandlerId uint32 `json:"handler_id" binding:"required"` // 经手人ID
|
|||
|
HandlerName string `json:"handler_name"` // 经手人名称
|
|||
|
State uint8 `json:"state"` // 状态(1-待审核,2-已审核,3-维修中,4-已完成)
|
|||
|
MakerId uint32 `json:"maker_id" binding:"required"` // 制单人ID
|
|||
|
MakerName string `json:"maker_name"` // 制单人名称
|
|||
|
MakerTime *time.Time `json:"maker_time"` // 制单时间
|
|||
|
AuditorId uint32 `json:"auditor_id"` // 审核人ID
|
|||
|
AuditorName string `json:"auditor_name"` // 审核人名称
|
|||
|
AuditTime *time.Time `json:"audit_time"` // 审核时间
|
|||
|
SendTime *time.Time `json:"send_time"` // 送修时间
|
|||
|
SendRemark string `json:"send_remark"` // 送修备注
|
|||
|
ExpressNo string `json:"express_no"` // 快递单号
|
|||
|
RepairUnitId uint32 `json:"repair_unit_id"` // 维修单位ID
|
|||
|
RepairFee float64 `json:"repair_fee"` // 维修费用
|
|||
|
CompletedTime *time.Time `json:"completed_time"` // 完成时间
|
|||
|
CompleteRemark string `json:"complete_remark"` // 完成备注
|
|||
|
Commodities []RepairRecordCommodity `json:"commodities"`
|
|||
|
}
|
|||
|
|
|||
|
// ErpRepairDeleteReq 删除维修订单入参
|
|||
|
type ErpRepairDeleteReq struct {
|
|||
|
SerialNumber string `json:"serial_number" binding:"required"` // 单据编号
|
|||
|
}
|
|||
|
|
|||
|
// ErpRepairOrderListReq 查询维修订单列表入参
|
|||
|
type ErpRepairOrderListReq struct {
|
|||
|
SerialNumber string `json:"serial_number"` // 单据编号
|
|||
|
Uid uint32 `json:"uid"` // 用户ID
|
|||
|
Tel string `json:"tel"` // 手机号
|
|||
|
MemberLevel uint32 `json:"member_level"` // 会员等级:普通用户、尊享会员
|
|||
|
StoreId []uint32 `json:"store_id"` // 门店id
|
|||
|
HandlerId uint32 `json:"handler_id"` // 经手人id
|
|||
|
State []uint32 `json:"state"` // 状态:1-待审核,2-已审核,3-维修中,4-已完成
|
|||
|
MakeTimeStart string `json:"make_time_start"` // 制单开始时间
|
|||
|
MakeTimeEnd string `json:"make_time_end"` // 制单结束时间
|
|||
|
AuditTimeStart string `json:"audit_time_start"` // 审核开始时间
|
|||
|
AuditTimeEnd string `json:"audit_time_end"` // 审核结束时间
|
|||
|
SendTimeStart string `json:"send_time_start"` // 送修开始时间
|
|||
|
SendTimeEnd string `json:"send_time_end"` // 送修结束时间
|
|||
|
CompleteTimeStart string `json:"complete_time_start"` // 维修完成开始时间
|
|||
|
CompleteTimeEnd string `json:"complete_time_end"` // 维修完成结束时间
|
|||
|
PageIndex int `json:"pageIndex"` // 页码
|
|||
|
PageSize int `json:"pageSize"` // 页面条数
|
|||
|
}
|
|||
|
|
|||
|
// ErpRepairOrderListResp 查询维修订单列表出参
|
|||
|
type ErpRepairOrderListResp struct {
|
|||
|
List []RepairRecord `json:"list"`
|
|||
|
Total int `json:"total"` // 总条数
|
|||
|
PageIndex int `json:"pageIndex"` // 页码
|
|||
|
PageSize int `json:"pageSize"` // 页面条数
|
|||
|
}
|
|||
|
|
|||
|
// ErpRepairDetailReq 查询维修订单详情入参
|
|||
|
type ErpRepairDetailReq struct {
|
|||
|
SerialNumber string `json:"serial_number" binding:"required"` // 单据编号
|
|||
|
}
|
|||
|
|
|||
|
// ErpRepairAuditReq 审核维修订单入参
|
|||
|
type ErpRepairAuditReq struct {
|
|||
|
SerialNumber string `json:"serial_number" binding:"required"` // 单据编号
|
|||
|
State int `json:"state" binding:"required"` // 审核操作: 1-审核 2-取消审核
|
|||
|
}
|
|||
|
|
|||
|
// ErpRepairSendReq 维修订单送修入参
|
|||
|
type ErpRepairSendReq struct {
|
|||
|
SerialNumber string `json:"serial_number" binding:"required"` // 单据编号
|
|||
|
RepairUnitId uint32 `json:"repair_unit_id" binding:"required"` // 维修单位ID(供应商)
|
|||
|
ExpressNo string `json:"express_no"` // 快递单号
|
|||
|
SendRemark string `json:"send_remark"` // 送修备注
|
|||
|
}
|
|||
|
|
|||
|
// ErpRepairCompleteReq 维修订单完成入参
|
|||
|
type ErpRepairCompleteReq struct {
|
|||
|
SerialNumber string `json:"serial_number" binding:"required"` // 单据编号
|
|||
|
RepairFee float64 `json:"repair_fee"` // 维修费用
|
|||
|
CompleteRemark string `json:"complete_remark"` // 完成备注
|
|||
|
}
|
|||
|
|
|||
|
// NewRepairBillSn 生成维修订单号
|
|||
|
func NewRepairBillSn() string {
|
|||
|
nowTime := time.Now()
|
|||
|
rand.Seed(nowTime.UnixNano())
|
|||
|
max := 1
|
|||
|
for {
|
|||
|
if max > 5 {
|
|||
|
logger.Error("create sn err")
|
|||
|
return ""
|
|||
|
}
|
|||
|
random := rand.Int31n(9999) + 1000
|
|||
|
sn := fmt.Sprintf("wx%s%d", nowTime.Format("060102"), random)
|
|||
|
exist, err := QueryRecordExist(fmt.Sprintf("SELECT * FROM repair_record WHERE serial_number='%s'", sn))
|
|||
|
if err != nil {
|
|||
|
logger.Error("exist sn err")
|
|||
|
}
|
|||
|
if !exist {
|
|||
|
return sn
|
|||
|
}
|
|||
|
|
|||
|
max++
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// CreateRepairOrder 创建维修订单
|
|||
|
func CreateRepairOrder(req *RepairCreateReq, sysUser *SysUser) (*RepairRecord, error) {
|
|||
|
// 开始事务
|
|||
|
tx := orm.Eloquent.Begin()
|
|||
|
defer func() {
|
|||
|
if r := recover(); r != nil {
|
|||
|
tx.Rollback()
|
|||
|
return
|
|||
|
}
|
|||
|
}()
|
|||
|
|
|||
|
userMemberLevel := 1
|
|||
|
// 判断是否为尊享会员
|
|||
|
if IsValidPrivilegeMember(req.Uid) {
|
|||
|
userMemberLevel = 6
|
|||
|
}
|
|||
|
|
|||
|
nowTime := time.Now()
|
|||
|
// 写入主表
|
|||
|
repair := RepairRecord{
|
|||
|
SerialNumber: NewRepairBillSn(),
|
|||
|
Uid: req.Uid,
|
|||
|
Tel: req.Tel,
|
|||
|
MemberLevel: uint32(userMemberLevel),
|
|||
|
StoreId: req.StoreId,
|
|||
|
HandlerId: req.HandlerId,
|
|||
|
HandlerName: req.HandlerName,
|
|||
|
MakerId: uint32(sysUser.UserId),
|
|||
|
MakerName: sysUser.NickName,
|
|||
|
MakerTime: &nowTime,
|
|||
|
State: ErpRepairOrderUnAudit, // 初始状态:待审核
|
|||
|
}
|
|||
|
if err := tx.Create(&repair).Error; err != nil {
|
|||
|
tx.Rollback()
|
|||
|
logger.Error("Create RepairRecord err:", logger.Field("err", err))
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
// 写入子表
|
|||
|
for _, com := range req.Commodities {
|
|||
|
item := RepairRecordCommodity{
|
|||
|
RepairRecordId: repair.ID,
|
|||
|
CommodityId: com.CommodityId,
|
|||
|
CommodityName: com.CommodityName,
|
|||
|
OldIMEI: com.OldIMEI,
|
|||
|
NewIMEI: com.NewIMEI,
|
|||
|
Count: com.Count,
|
|||
|
FaultImage: com.FaultImage,
|
|||
|
FaultDesc: com.FaultDesc,
|
|||
|
}
|
|||
|
if err := tx.Create(&item).Error; err != nil {
|
|||
|
tx.Rollback()
|
|||
|
logger.Error("Create RepairCommodity err:", logger.Field("err", err))
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if err := tx.Commit().Error; err != nil {
|
|||
|
tx.Rollback()
|
|||
|
logger.Error("commit err:", logger.Field("err", err))
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
repair.Commodities = req.Commodities
|
|||
|
|
|||
|
return &repair, nil
|
|||
|
}
|
|||
|
|
|||
|
// EditRepairOrder 编辑维修订单
|
|||
|
func EditRepairOrder(req *RepairEditReq, sysUser *SysUser) (*RepairRecord, error) {
|
|||
|
// 查询订单信息
|
|||
|
var repairOrder RepairRecord
|
|||
|
err := orm.Eloquent.Table("repair_record").Where("serial_number=?", req.SerialNumber).Find(&repairOrder).Error
|
|||
|
if err != nil {
|
|||
|
logger.Error("repair order err:", logger.Field("err", err))
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
if repairOrder.State != ErpRepairOrderUnAudit { // 只有待审核的订单才能编辑
|
|||
|
return nil, errors.New("订单不是待审核状态")
|
|||
|
}
|
|||
|
|
|||
|
begin := orm.Eloquent.Begin()
|
|||
|
// 1-更新维修订单信息
|
|||
|
repairOrder.Uid = req.Uid
|
|||
|
repairOrder.Tel = req.Tel
|
|||
|
repairOrder.MemberLevel = req.MemberLevel
|
|||
|
repairOrder.StoreId = req.StoreId
|
|||
|
repairOrder.HandlerId = req.HandlerId
|
|||
|
repairOrder.HandlerName = req.HandlerName
|
|||
|
repairOrder.MakerId = uint32(sysUser.UserId)
|
|||
|
repairOrder.MakerName = sysUser.NickName
|
|||
|
|
|||
|
err = begin.Model(&RepairRecord{}).Where("serial_number=?", req.SerialNumber).
|
|||
|
Omit("created_at").Save(repairOrder).Error
|
|||
|
if err != nil {
|
|||
|
begin.Rollback()
|
|||
|
logger.Error("update erp_order err:", logger.Field("err", err))
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
// 2-更新维修订单商品表
|
|||
|
err = updateRepairCommodityData(begin, repairOrder.ID, req)
|
|||
|
if err != nil {
|
|||
|
begin.Rollback()
|
|||
|
logger.Error("update erp_purchase_commodity err:", logger.Field("err", err))
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
err = begin.Commit().Error
|
|||
|
if err != nil {
|
|||
|
begin.Rollback()
|
|||
|
logger.Error("commit err:", logger.Field("err", err))
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
return &repairOrder, nil
|
|||
|
}
|
|||
|
|
|||
|
// updateRepairCommodityData 更新维修订单商品信息
|
|||
|
func updateRepairCommodityData(gdb *gorm.DB, orderId uint32, req *RepairEditReq) error {
|
|||
|
// 查询现有的零售订单信息
|
|||
|
var commodities []RepairRecordCommodity
|
|||
|
err := orm.Eloquent.Table("repair_record_commodity").Where("repair_record_id = ?", orderId).Find(&commodities).Error
|
|||
|
if err != nil {
|
|||
|
logger.Error("query repair_record_commodity err:", logger.Field("err", err))
|
|||
|
return err
|
|||
|
}
|
|||
|
|
|||
|
// 1-删除所有的商品信息
|
|||
|
if len(commodities) != 0 {
|
|||
|
err = gdb.Delete(&commodities).Error
|
|||
|
if err != nil {
|
|||
|
logger.Error("更新商品订单信息-删除 error")
|
|||
|
return errors.New("操作失败:" + err.Error())
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
for i, _ := range req.Commodities {
|
|||
|
req.Commodities[i].ID = 0
|
|||
|
if req.Commodities[i].RepairRecordId == 0 { //发现前端有时会没传,后端打补丁
|
|||
|
req.Commodities[i].RepairRecordId = orderId
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 2-更新商品订单信息-新增
|
|||
|
if len(req.Commodities) != 0 {
|
|||
|
err = gdb.Create(&req.Commodities).Error
|
|||
|
if err != nil {
|
|||
|
logger.Error("更新商品订单信息-新增 error")
|
|||
|
return errors.New("操作失败:" + err.Error())
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return nil
|
|||
|
}
|
|||
|
|
|||
|
// List 查询采购订单列表
|
|||
|
func (m *ErpRepairOrderListReq) List(c *gin.Context) (*ErpRepairOrderListResp, error) {
|
|||
|
resp := &ErpRepairOrderListResp{
|
|||
|
PageIndex: m.PageIndex,
|
|||
|
PageSize: m.PageSize,
|
|||
|
}
|
|||
|
page := m.PageIndex - 1
|
|||
|
if page < 0 {
|
|||
|
page = 0
|
|||
|
}
|
|||
|
if m.PageSize == 0 {
|
|||
|
m.PageSize = 10
|
|||
|
}
|
|||
|
qs := orm.Eloquent.Table("repair_record")
|
|||
|
if m.SerialNumber != "" {
|
|||
|
qs = qs.Where("serial_number = ?", m.SerialNumber)
|
|||
|
} else if m.Uid != 0 {
|
|||
|
qs = qs.Where("uid = ?", m.Uid)
|
|||
|
} else if m.Tel != "" {
|
|||
|
qs = qs.Where("tel = ?", m.Tel)
|
|||
|
} else {
|
|||
|
if len(m.StoreId) != 0 {
|
|||
|
qs = qs.Where("store_id in ?", m.StoreId)
|
|||
|
}
|
|||
|
// 非管理员才判断所属门店
|
|||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
|||
|
sysUser, err := GetSysUserByCtx(c)
|
|||
|
if err != nil {
|
|||
|
return nil, errors.New("操作失败:" + err.Error())
|
|||
|
}
|
|||
|
|
|||
|
// 返回sysUser未过期的门店id列表
|
|||
|
storeList := GetValidStoreIDs(sysUser.StoreData)
|
|||
|
if len(storeList) > 0 {
|
|||
|
if len(storeList) == 1 {
|
|||
|
qs = qs.Where("store_id = ?", storeList[0])
|
|||
|
} else {
|
|||
|
qs = qs.Where("store_id IN (?)", storeList)
|
|||
|
}
|
|||
|
} else {
|
|||
|
return nil, errors.New("用户未绑定门店")
|
|||
|
}
|
|||
|
}
|
|||
|
if m.MemberLevel != 0 {
|
|||
|
qs = qs.Where("member_level = ?", m.MemberLevel)
|
|||
|
}
|
|||
|
if len(m.State) > 0 {
|
|||
|
qs = qs.Where("state IN (?)", m.State)
|
|||
|
}
|
|||
|
if m.HandlerId != 0 {
|
|||
|
qs = qs.Where("handler_id=?", m.HandlerId)
|
|||
|
}
|
|||
|
if m.AuditTimeStart != "" {
|
|||
|
parse, err := time.Parse(QueryTimeFormat, m.AuditTimeStart)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("erpRepairOrderList err:", err)
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
qs = qs.Where("audit_time > ?", parse)
|
|||
|
}
|
|||
|
if m.AuditTimeEnd != "" {
|
|||
|
parse, err := time.Parse(QueryTimeFormat, m.AuditTimeEnd)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("erpRepairOrderList err:", err)
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
//parse = parse.AddDate(0, 0, 1)
|
|||
|
qs = qs.Where("audit_time < ?", parse)
|
|||
|
}
|
|||
|
if m.MakeTimeStart != "" {
|
|||
|
parse, err := time.Parse(QueryTimeFormat, m.MakeTimeStart)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("err:", err)
|
|||
|
}
|
|||
|
qs = qs.Where("maker_time > ?", parse)
|
|||
|
}
|
|||
|
if m.MakeTimeEnd != "" {
|
|||
|
parse, err := time.Parse(QueryTimeFormat, m.MakeTimeEnd)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("err:", err)
|
|||
|
}
|
|||
|
qs = qs.Where("maker_time < ?", parse)
|
|||
|
}
|
|||
|
if m.SendTimeStart != "" {
|
|||
|
parse, err := time.Parse(QueryTimeFormat, m.SendTimeStart)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("err:", err)
|
|||
|
}
|
|||
|
qs = qs.Where("send_time > ?", parse)
|
|||
|
}
|
|||
|
if m.SendTimeEnd != "" {
|
|||
|
parse, err := time.Parse(QueryTimeFormat, m.SendTimeEnd)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("err:", err)
|
|||
|
}
|
|||
|
qs = qs.Where("send_time < ?", parse)
|
|||
|
}
|
|||
|
if m.CompleteTimeStart != "" {
|
|||
|
parse, err := time.Parse(QueryTimeFormat, m.CompleteTimeStart)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("err:", err)
|
|||
|
}
|
|||
|
qs = qs.Where("complete_time > ?", parse)
|
|||
|
}
|
|||
|
if m.CompleteTimeEnd != "" {
|
|||
|
parse, err := time.Parse(QueryTimeFormat, m.CompleteTimeEnd)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("err:", err)
|
|||
|
}
|
|||
|
qs = qs.Where("complete_time < ?", parse)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
var count int64
|
|||
|
err := qs.Count(&count).Error
|
|||
|
if err != nil {
|
|||
|
logger.Error("count err:", logger.Field("err", err))
|
|||
|
return resp, err
|
|||
|
}
|
|||
|
resp.Total = int(count)
|
|||
|
var orders []RepairRecord
|
|||
|
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&orders).Error
|
|||
|
if err != nil && err != RecordNotFound {
|
|||
|
logger.Error("erp commodity list err:", logger.Field("err", err))
|
|||
|
return resp, err
|
|||
|
}
|
|||
|
|
|||
|
// 校验时间,如果为01-01-01 08:05,则赋值为空
|
|||
|
for i, v := range orders {
|
|||
|
if v.MakerTime != nil && v.MakerTime.IsZero() {
|
|||
|
orders[i].MakerTime = nil
|
|||
|
}
|
|||
|
|
|||
|
if v.AuditTime != nil && v.AuditTime.IsZero() {
|
|||
|
orders[i].AuditTime = nil
|
|||
|
}
|
|||
|
|
|||
|
if v.SendTime != nil && v.SendTime.IsZero() {
|
|||
|
orders[i].SendTime = nil
|
|||
|
}
|
|||
|
|
|||
|
if v.CompletedTime != nil && v.CompletedTime.IsZero() {
|
|||
|
orders[i].CompletedTime = nil
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
resp.List = orders
|
|||
|
return resp, nil
|
|||
|
}
|
|||
|
|
|||
|
// SendToRepair 维修订单送修
|
|||
|
func SendToRepair(req *ErpRepairSendReq, c *gin.Context) error {
|
|||
|
// 查询订单信息
|
|||
|
var repairRecord RepairRecord
|
|||
|
err := orm.Eloquent.Table("repair_record").Where("serial_number = ?", req.SerialNumber).
|
|||
|
Find(&repairRecord).Error
|
|||
|
if err != nil {
|
|||
|
logger.Error("order err:", logger.Field("err", err))
|
|||
|
return err
|
|||
|
}
|
|||
|
|
|||
|
sysUser, err := GetSysUserByCtx(c)
|
|||
|
if err != nil {
|
|||
|
logger.Error("sys user err:", logger.Field("err", err))
|
|||
|
return err
|
|||
|
}
|
|||
|
|
|||
|
// 校验入参门店是否包含在用户所有门店中,是否过期
|
|||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
|||
|
if !CheckUserStore(repairRecord.StoreId, sysUser) {
|
|||
|
return errors.New("操作失败:您没有该门店权限")
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if repairRecord.ID == 0 {
|
|||
|
return errors.New("未查询到订单信息")
|
|||
|
}
|
|||
|
|
|||
|
if repairRecord.State != ErpRepairOrderWaitRepair {
|
|||
|
return errors.New("订单不是待送修状态")
|
|||
|
}
|
|||
|
|
|||
|
nowTime := time.Now()
|
|||
|
repairRecord.RepairUnitId = req.RepairUnitId
|
|||
|
repairRecord.ExpressNo = req.ExpressNo
|
|||
|
repairRecord.SendRemark = req.SendRemark
|
|||
|
repairRecord.State = ErpRepairOrderBingRepaired
|
|||
|
repairRecord.SendTime = &nowTime
|
|||
|
|
|||
|
err = orm.Eloquent.Model(&RepairRecord{}).Where("id = ?", repairRecord.ID).
|
|||
|
Updates(repairRecord).Error
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
|
|||
|
return nil
|
|||
|
}
|
|||
|
|
|||
|
// CompleteRepairOrder 维修订单完成
|
|||
|
func CompleteRepairOrder(req *ErpRepairCompleteReq, c *gin.Context) error {
|
|||
|
// 查询订单信息
|
|||
|
var repairRecord RepairRecord
|
|||
|
err := orm.Eloquent.Table("repair_record").Where("serial_number = ?", req.SerialNumber).
|
|||
|
Find(&repairRecord).Error
|
|||
|
if err != nil {
|
|||
|
logger.Error("order err:", logger.Field("err", err))
|
|||
|
return err
|
|||
|
}
|
|||
|
|
|||
|
sysUser, err := GetSysUserByCtx(c)
|
|||
|
if err != nil {
|
|||
|
logger.Error("sys user err:", logger.Field("err", err))
|
|||
|
return err
|
|||
|
}
|
|||
|
|
|||
|
// 校验入参门店是否包含在用户所有门店中,是否过期
|
|||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
|||
|
if !CheckUserStore(repairRecord.StoreId, sysUser) {
|
|||
|
return errors.New("操作失败:您没有该门店权限")
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if repairRecord.ID == 0 {
|
|||
|
return errors.New("未查询到订单信息")
|
|||
|
}
|
|||
|
|
|||
|
if repairRecord.State != ErpRepairOrderBingRepaired {
|
|||
|
return errors.New("订单不是待送修状态")
|
|||
|
}
|
|||
|
|
|||
|
nowTime := time.Now()
|
|||
|
repairRecord.RepairFee = req.RepairFee
|
|||
|
repairRecord.CompleteRemark = req.CompleteRemark
|
|||
|
repairRecord.State = ErpRepairOrderFinished
|
|||
|
repairRecord.CompletedTime = &nowTime
|
|||
|
|
|||
|
err = orm.Eloquent.Model(&RepairRecord{}).Where("id = ?", repairRecord.ID).
|
|||
|
Updates(repairRecord).Error
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
|
|||
|
return nil
|
|||
|
}
|