|
|
@@ -2,12 +2,13 @@ package work
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
- "database/sql"
|
|
|
- "fmt"
|
|
|
-
|
|
|
contractdao "dashoo.cn/micro/app/dao/contract"
|
|
|
workdao "dashoo.cn/micro/app/dao/work"
|
|
|
work "dashoo.cn/micro/app/model/work"
|
|
|
+ "dashoo.cn/micro/app/service"
|
|
|
+ "database/sql"
|
|
|
+ "fmt"
|
|
|
+ "github.com/gogf/gf/util/gconv"
|
|
|
|
|
|
"dashoo.cn/opms_libary/micro_srv"
|
|
|
"dashoo.cn/opms_libary/myerrors"
|
|
|
@@ -68,10 +69,17 @@ func (s DeliverOrderProgressService) List(ctx context.Context, req *work.Deliver
|
|
|
if req.ProgressStatus != "" {
|
|
|
dao = dao.Where("progress_status = ?", req.ProgressStatus)
|
|
|
}
|
|
|
+ if req.ProgressType != "" {
|
|
|
+ dao = dao.Where("progress_type = ?", req.ProgressType)
|
|
|
+ }
|
|
|
if req.ProgressLevel != "" {
|
|
|
dao = dao.Where("progress_level = ?", req.ProgressLevel)
|
|
|
}
|
|
|
|
|
|
+ if req.IsPrincipalPerson == "1" {
|
|
|
+ dao = dao.Where("principal_person_id = ?", s.userInfo.Id)
|
|
|
+ }
|
|
|
+
|
|
|
total, err := dao.Count()
|
|
|
if err != nil {
|
|
|
return 0, nil, err
|
|
|
@@ -178,6 +186,12 @@ func (s DeliverOrderProgressService) Update(ctx context.Context, req *work.Deliv
|
|
|
if req.Remark != nil {
|
|
|
toupdate["remark"] = req.Remark
|
|
|
}
|
|
|
+ if req.PrincipalPersonId != 0 {
|
|
|
+ toupdate["principal_person_id"] = req.PrincipalPersonId
|
|
|
+ }
|
|
|
+ if req.PrincipalPerson != "" {
|
|
|
+ toupdate["principal_person"] = req.PrincipalPerson
|
|
|
+ }
|
|
|
if len(toupdate) != 0 {
|
|
|
toupdate["updated_by"] = int(s.userInfo.Id)
|
|
|
toupdate["updated_name"] = s.userInfo.NickName
|
|
|
@@ -196,7 +210,6 @@ func (s DeliverOrderProgressService) Update(ctx context.Context, req *work.Deliv
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-
|
|
|
func (s DeliverOrderProgressService) Start(ctx context.Context, req *work.DeliverOrderImpProgressStartReq) error {
|
|
|
validErr := gvalid.CheckStruct(ctx, req, nil)
|
|
|
if validErr != nil {
|
|
|
@@ -212,11 +225,22 @@ func (s DeliverOrderProgressService) Start(ctx context.Context, req *work.Delive
|
|
|
}
|
|
|
|
|
|
txerr := s.Dao.DB.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
|
|
|
- _, err = tx.Update("deliver_order_imp_progress", map[string]interface{}{
|
|
|
- "progress_status": "20",
|
|
|
- "rea_start_date": gtime.Now(),
|
|
|
- "remark": req.Remark,
|
|
|
- }, "id = ?", req.Id)
|
|
|
+ // 10发货任务单/20组装任务单/30部署安装单
|
|
|
+ if ent.ProgressType == "10" {
|
|
|
+ _, err = tx.Update("deliver_order_imp_progress", map[string]interface{}{
|
|
|
+ "progress_status": "20",
|
|
|
+ "deliver_status": "20", // 发货状态(10未开始、20进行中、30已发货、40产品已验收、50确认已到货、60安装完成)
|
|
|
+ "rea_start_date": gtime.Now(),
|
|
|
+ "remark": req.Remark,
|
|
|
+ }, "id = ?", req.Id)
|
|
|
+ } else {
|
|
|
+ _, err = tx.Update("deliver_order_imp_progress", map[string]interface{}{
|
|
|
+ "progress_status": "20",
|
|
|
+ "rea_start_date": gtime.Now(),
|
|
|
+ "remark": req.Remark,
|
|
|
+ }, "id = ?", req.Id)
|
|
|
+ }
|
|
|
+
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -244,9 +268,9 @@ func (s DeliverOrderProgressService) Finish(ctx context.Context, req *work.Deliv
|
|
|
|
|
|
txerr := s.Dao.DB.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
|
|
|
_, err = tx.Update("deliver_order_imp_progress", map[string]interface{}{
|
|
|
- "progress_status": "30",
|
|
|
- "rea_end_date": gtime.Now(),
|
|
|
- "remark": req.Remark,
|
|
|
+ "progress_status": "30",
|
|
|
+ "rea_end_date": gtime.Now(),
|
|
|
+ "remark": req.Remark,
|
|
|
}, "id = ?", req.Id)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
@@ -266,3 +290,267 @@ func (s DeliverOrderProgressService) Delete(ctx context.Context, id []int) error
|
|
|
_, err := s.Dao.Where("Id IN (?)", id).Delete()
|
|
|
return err
|
|
|
}
|
|
|
+
|
|
|
+// StartDeliverGoodsProgress (硬件交付工单)发起发货任务单
|
|
|
+func (s DeliverOrderProgressService) StartDeliverGoodsProgress(ctx context.Context, req *work.StartDeliverGoodsProgressReq) error {
|
|
|
+ err := s.Dao.DB.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
|
|
|
+ var assembleProgress work.DeliverOrderImpProgress
|
|
|
+ var deliverProgress work.DeliverOrderImpProgress
|
|
|
+ err := gconv.Struct(req.Progress, &deliverProgress)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ // 初始化数据
|
|
|
+ deliverProgress.ProgressStatus = "10" // 状态(10未开始20进行中30已完成)
|
|
|
+ deliverProgress.DeliverStatus = "10" // 发货状态(10未开始、20进行中、30已发货、40产品已验收、50确认已到货、60安装完成)
|
|
|
+ //deliverProgress.ProgressType = "10" // 10发货任务单/20组装任务单/30部署安装单
|
|
|
+ if deliverProgress.PrincipalPerson == "" {
|
|
|
+ deliverProgress.PrincipalPersonId, deliverProgress.PrincipalPerson, err = s.getUserInfo("丁岳嵩")
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ service.SetCreatedInfo(&deliverProgress, s.userInfo.Id, s.userInfo.NickName)
|
|
|
+
|
|
|
+ // 初始化数据
|
|
|
+ assembleProgress.DeliverOrderId = deliverProgress.DeliverOrderId
|
|
|
+ assembleProgress.PlanId = deliverProgress.PlanId
|
|
|
+ assembleProgress.ProgressStatus = "10" // 状态(10未开始20进行中30已完成)
|
|
|
+ assembleProgress.ProgressType = "20" // 10发货任务单/20组装任务单/30部署安装单
|
|
|
+ assembleProgress.ProgressTitle = deliverProgress.ProgressTitle + "_组装任务单"
|
|
|
+ assembleProgress.StartDate = deliverProgress.StartDate
|
|
|
+ assembleProgress.EndDate = deliverProgress.EndDate
|
|
|
+ assembleProgress.ProgressLevel = deliverProgress.ProgressLevel
|
|
|
+ assembleProgress.PrincipalPersonId, assembleProgress.PrincipalPerson, err = s.getUserInfo("王志强")
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ service.SetCreatedInfo(&assembleProgress, s.userInfo.Id, s.userInfo.NickName)
|
|
|
+
|
|
|
+ progressIds := ""
|
|
|
+ assembleIds := ""
|
|
|
+ for _, product := range req.Products {
|
|
|
+ if progressIds == "" {
|
|
|
+ progressIds = gconv.String(product.Id)
|
|
|
+ } else {
|
|
|
+ progressIds += "," + gconv.String(product.Id)
|
|
|
+ }
|
|
|
+ // 外购;组装
|
|
|
+ if product.OperateType == "组装" {
|
|
|
+ if assembleIds == "" {
|
|
|
+ assembleIds = gconv.String(product.Id)
|
|
|
+ } else {
|
|
|
+ assembleIds += "," + gconv.String(product.Id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存数据
|
|
|
+ result1, err := tx.Save("deliver_order_imp_progress", deliverProgress)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ deliverId, _ := result1.LastInsertId()
|
|
|
+ if progressIds != "" {
|
|
|
+ _, err = tx.Update("deliver_order_product", fmt.Sprintf("is_deliver='20',deliver_progress_id='%v',operate_type='外购'", deliverId), fmt.Sprintf("id IN (%v)", progressIds))
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 存在硬件安装
|
|
|
+ if assembleIds != "" {
|
|
|
+ result2, err := tx.Save("deliver_order_imp_progress", assembleProgress)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ assembleId, _ := result2.LastInsertId()
|
|
|
+ _, err = tx.Update("deliver_order_product", fmt.Sprintf("assemble_progress_id='%v',operate_type='组装'", assembleId), fmt.Sprintf("id IN (%v)", assembleIds))
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s DeliverOrderProgressService) getUserInfo(name string) (int, string, error) {
|
|
|
+ user, err := s.Dao.DB.Model("sys_user").Where(fmt.Sprintf("nick_name='%v'", name)).One()
|
|
|
+ if err != nil {
|
|
|
+ return 0, "", err
|
|
|
+ }
|
|
|
+
|
|
|
+ return user["id"].Int(), user["nick_name"].String(), nil
|
|
|
+}
|
|
|
+
|
|
|
+// CompleteAssembleGoodsProgress 组装完成
|
|
|
+func (s DeliverOrderProgressService) CompleteAssembleGoodsProgress(ctx context.Context, req *work.CompleteAssembleGoodsProgressReq) error {
|
|
|
+ _, err := s.Dao.Update(fmt.Sprintf("progress_status='30',rea_end_date='%v',assemble_file_url='%v',assemble_file_name='%v',remark='%v'", req.ReaEndDate, req.FileUrl, req.FileName, req.Remark), fmt.Sprintf("id='%v'", req.Id))
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ _, err = s.ProductDao.Update("is_complete='20'", fmt.Sprintf("assemble_progress_id='%v'", req.Id))
|
|
|
+
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
+// DeliverGoods 发货
|
|
|
+func (s DeliverOrderProgressService) DeliverGoods(ctx context.Context, req *work.DeliverGoodsReq) error {
|
|
|
+ progress, err := s.Dao.Where(fmt.Sprintf("id='%v'", req.Id)).FindOne()
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ _, err = s.Dao.Update(fmt.Sprintf("deliver_status='30',express_name='%v',express_code='%v',estimated_arrival_time='%v'", req.ExpressName, req.ExpressCode, req.EstimatedArrivalTime), fmt.Sprintf("id='%v'", req.Id))
|
|
|
+
|
|
|
+ // 生成部署安装计划
|
|
|
+ var plan work.DeliverOrderImpPlan
|
|
|
+ plan.DeliverOrderId = progress.DeliverOrderId
|
|
|
+ plan.PlanTitle = "部署安装计划"
|
|
|
+ plan.PlanStatus = "10"
|
|
|
+ plan.PlanStartDate = gtime.Now()
|
|
|
+ plan.PlanEndDate = req.EstimatedArrivalTime
|
|
|
+ service.SetCreatedInfo(&plan, s.userInfo.Id, s.userInfo.NickName)
|
|
|
+ _, err = s.PlanDao.Save(plan)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
+// InspectGoods 验收
|
|
|
+func (s DeliverOrderProgressService) InspectGoods(ctx context.Context, req *work.InspectGoodsReq) error {
|
|
|
+ _, err := s.Dao.Update(fmt.Sprintf("deliver_status='40',arrival_time='%v',check_file_url='%v',check_file_name='%v',check_person_id='%v',check_person='%v'", req.ArrivalTime, req.FileUrl, req.FileName, s.userInfo.Id, s.userInfo.NickName), fmt.Sprintf("id='%v'", req.Id))
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
+// ConfirmArrival 确认到货
|
|
|
+func (s DeliverOrderProgressService) ConfirmArrival(ctx context.Context, req *work.ConfirmArrivalReq) error {
|
|
|
+ data := fmt.Sprintf("deliver_status='50'")
|
|
|
+ if req.Remark != "" {
|
|
|
+ data = fmt.Sprintf("deliver_status='50',remark='%v'", req.Remark)
|
|
|
+ }
|
|
|
+ _, err := s.Dao.Update(data, fmt.Sprintf("id='%v'", req.Id))
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
+// StartInstallProgress (硬件交付工单)发起部署安装单
|
|
|
+func (s DeliverOrderProgressService) StartInstallProgress(ctx context.Context, req *work.StartDeliverGoodsProgressReq) error {
|
|
|
+ err := s.Dao.DB.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
|
|
|
+ var progress work.DeliverOrderImpProgress
|
|
|
+ err := gconv.Struct(req.Progress, &progress)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ // 初始化数据
|
|
|
+ progress.ProgressStatus = "10" // 状态(10未开始20进行中30已完成)
|
|
|
+ progress.ProgressType = "30" // 10发货任务单/20组装任务单/30部署安装单
|
|
|
+ if progress.PrincipalPerson == "" {
|
|
|
+ progress.PrincipalPersonId, progress.PrincipalPerson, err = s.getUserInfo("王志强")
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ service.SetCreatedInfo(&progress, s.userInfo.Id, s.userInfo.NickName)
|
|
|
+
|
|
|
+ // 保存数据
|
|
|
+ result1, err := tx.Save("deliver_order_imp_progress", progress)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ deliverId, _ := result1.LastInsertId()
|
|
|
+ ids := ""
|
|
|
+ for _, product := range req.Products {
|
|
|
+ if ids == "" {
|
|
|
+ ids = gconv.String(product.Id)
|
|
|
+ } else {
|
|
|
+ ids += "," + gconv.String(product.Id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ _, err = tx.Update("deliver_order_product", fmt.Sprintf("install_progress_id='%v'", deliverId), fmt.Sprintf("id IN (%v)", ids))
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// CompleteInstall 完成安装(部署安装单)
|
|
|
+func (s DeliverOrderProgressService) CompleteInstall(ctx context.Context, req *work.CompleteInstallReq) error {
|
|
|
+ progress, err := s.Dao.Where(fmt.Sprintf("id='%v'", req.Id)).FindOne()
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ allProducts, err := s.ProductDao.Where(fmt.Sprintf("deliver_order_id='%v'", progress.DeliverOrderId)).FindAll()
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ progressMap := make(map[int]bool, 0)
|
|
|
+ ids := ""
|
|
|
+ progressIds := ""
|
|
|
+ // 第一次循环,取出需要更新的数据
|
|
|
+ for _, product := range allProducts {
|
|
|
+ if product.InstallProgressId == req.Id {
|
|
|
+ progressMap[product.DeliverProgressId] = true
|
|
|
+ if ids == "" {
|
|
|
+ ids = gconv.String(product.Id)
|
|
|
+ } else {
|
|
|
+ ids += "," + gconv.String(product.Id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 判断是否已全部完成
|
|
|
+ for key := range progressMap {
|
|
|
+ for _, product := range allProducts {
|
|
|
+ if product.DeliverProgressId == key && product.IsInstall != "20" && product.InstallProgressId != req.Id {
|
|
|
+ progressMap[key] = false
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if progressMap[key] {
|
|
|
+ if progressIds == "" {
|
|
|
+ progressIds = gconv.String(key)
|
|
|
+ } else {
|
|
|
+ progressIds += "," + gconv.String(key)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ err = s.Dao.DB.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
|
|
|
+ _, err = tx.Update("deliver_order_imp_progress", fmt.Sprintf("progress_status='30',install_date='%v',install_check_file_url='%v',install_check_file_name='%v',remark='%v',rea_end_date='%v'", req.InstallDate, req.FileUrl, req.FileName, req.Remark, req.InstallDate), fmt.Sprintf("id='%v'", req.Id))
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ // 更新发货任务单状态
|
|
|
+ if progressIds != "" {
|
|
|
+ _, err = tx.Update("deliver_order_imp_progress", "deliver_status='60'", fmt.Sprintf("id IN (%v)", progressIds))
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 更新产品状态
|
|
|
+ if ids != "" {
|
|
|
+ _, err = tx.Update("deliver_order_product", "is_install='20'", fmt.Sprintf("id IN (%v)", ids))
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+ })
|
|
|
+
|
|
|
+ return err
|
|
|
+}
|