Ver código fonte

feature(交付工单): 合同和工单模块优化功能完成,自测bug修复

likai 1 ano atrás
pai
commit
42d7742834

+ 7 - 1
opms_parent/app/service/work/deliver_order.go

@@ -842,8 +842,14 @@ func (s DeliverOrderService) SoftwareStart(ctx context.Context, req *work.Softwa
 	softwareDeliverProgress.EndDate = req.EndDate
 	softwareDeliverProgress.ReaStartDate = gtime.Now()
 	softwareDeliverProgress.ProgressLevel = "20" // 优先级(10最高 20普通 30较低 )
+	softwareDeliverProgress.SoftwareRequiredDeliveryTime = req.SoftwareRequiredDeliveryTime
+	softwareDeliverProgress.SoftwareSpecialRequirements = req.SoftwareSpecialRequirements
 	if softwareDeliverProgress.PrincipalPerson == "" {
-		softwareDeliverProgress.PrincipalPersonId, softwareDeliverProgress.PrincipalPerson = order.DeliverManId, order.DeliverManName
+		if order.DeliverManName != "" {
+			softwareDeliverProgress.PrincipalPersonId, softwareDeliverProgress.PrincipalPerson = order.DeliverManId, order.DeliverManName
+		} else {
+			softwareDeliverProgress.PrincipalPersonId, softwareDeliverProgress.PrincipalPerson = order.ProjectManId, order.ProjectManName
+		}
 	}
 	service.SetCreatedInfo(&softwareDeliverProgress, s.userInfo.Id, s.userInfo.NickName)
 	_, err = s.Dao.DB.Model("deliver_order_imp_progress").Save(softwareDeliverProgress)

+ 58 - 42
opms_parent/app/service/work/deliver_order_progress.go

@@ -483,14 +483,14 @@ func (s DeliverOrderProgressService) DeliverGoods(ctx context.Context, req *work
 
 	err = s.Dao.DB.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
 		// 更新实际发货时间
-		_, err = tx.Update("deliver_order", "real_delivery_time='%v'", req.RealDeliveryTime, fmt.Sprintf("id='%v'", progress.DeliverOrderId))
+		_, err = tx.Update("deliver_order", fmt.Sprintf("real_delivery_time='%v'", req.RealDeliveryTime), fmt.Sprintf("id='%v'", progress.DeliverOrderId))
 		if err != nil {
 			return err
 		}
 		// 若第一次,更新合同的硬件运维开始时间、结束时间
-		if contract.HardwareMaintenanceBeginTime == nil {
+		if contract.HardwareMaintenanceBeginTime == nil || contract.HardwareMaintenanceBeginTime.IsZero() {
 			endTime := req.RealDeliveryTime.AddDate(contract.HardwareMaintenanceLimit, 0, 0)
-			_, err = tx.Update("ctr_contract", "hardware_maintenance_begin_time='%v',hardware_maintenance_end_time='%v'", req.RealDeliveryTime, endTime, fmt.Sprintf("id='%v'", progress.DeliverOrderId))
+			_, err = tx.Update("ctr_contract", fmt.Sprintf("hardware_maintenance_begin_time='%v',hardware_maintenance_end_time='%v'", req.RealDeliveryTime, endTime), fmt.Sprintf("id='%v'", order.ContractId))
 			if err != nil {
 				return err
 			}
@@ -826,48 +826,64 @@ func (s DeliverOrderProgressService) CompleteSoftware(ctx context.Context, req *
 	if err != nil {
 		return err
 	}
-	data := g.Map{
-		"progress_status":          "30",
-		"software_check_time":      req.SoftwareCheckTime,
-		"software_check_file_url":  req.SoftwareCheckFileUrl,
-		"software_check_file_name": req.SoftwareCheckFileName,
-		"software_check_person_id": s.userInfo.Id,
-		"software_check_person":    s.userInfo.NickName,
-		"completed_content":        req.CompletedContent,
-		"completed_work":           req.CompletedWork,
-		"uncompleted_content":      req.UncompletedContent,
-		"uncompleted_work":         req.UncompletedWork,
-		"updated_by":               s.userInfo.Id,
-		"updated_name":             s.userInfo.NickName,
-		"updated_time":             gtime.Now(),
-	}
-	// 更新验收单信息
-	_, err = s.Dao.Update(data, fmt.Sprintf("id='%v'", req.Id))
+	progress, err := s.Dao.Where("id=?", req.Id).One()
 	if err != nil {
 		return err
 	}
-	// 更新交付工单状态
-	_, err = s.OrderDao.Update(g.Map{
-		"order_status":   "20",
-		"finish_time":    gtime.Now(),
-		"finish_by":      s.userInfo.Id,
-		"finish_by_name": s.userInfo.NickName,
-		"updated_by":     s.userInfo.Id,
-		"updated_name":   s.userInfo.NickName,
-		"updated_time":   gtime.Now(),
-	}, fmt.Sprintf("id='%v'", req.DeliverOrderId))
-	if err != nil {
+	isDelay := "10"
+	// 延期判断
+	if progress.SoftwareRequiredDeliveryTime != nil && req.SoftwareCheckTime != nil && req.SoftwareCheckTime.Format("Y-m-d") > progress.SoftwareRequiredDeliveryTime.Format("Y-m-d") {
+		isDelay = "20"
+	}
+	err = s.Dao.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
+		data := g.Map{
+			"progress_status":          "30",
+			"software_check_time":      req.SoftwareCheckTime,
+			"software_check_file_url":  req.SoftwareCheckFileUrl,
+			"software_check_file_name": req.SoftwareCheckFileName,
+			"software_check_person_id": s.userInfo.Id,
+			"software_check_person":    s.userInfo.NickName,
+			"completed_content":        req.CompletedContent,
+			"completed_work":           req.CompletedWork,
+			"uncompleted_content":      req.UncompletedContent,
+			"uncompleted_work":         req.UncompletedWork,
+			"rea_end_date":             gtime.Now(),
+			"is_delay":                 isDelay,
+			"updated_by":               s.userInfo.Id,
+			"updated_name":             s.userInfo.NickName,
+			"updated_time":             gtime.Now(),
+		}
+		// 更新验收单信息
+		_, err := tx.Update("deliver_order_imp_progress", data, fmt.Sprintf("id='%v'", req.Id))
+		if err != nil {
+			return err
+		}
+		// 更新交付工单状态
+		_, err = tx.Update("deliver_order", g.Map{
+			"order_status":   "20",
+			"finish_time":    gtime.Now(),
+			"finish_by":      s.userInfo.Id,
+			"finish_by_name": s.userInfo.NickName,
+			"is_delay":       isDelay,
+			"updated_by":     s.userInfo.Id,
+			"updated_name":   s.userInfo.NickName,
+			"updated_time":   gtime.Now(),
+		}, fmt.Sprintf("id='%v'", req.DeliverOrderId))
+		if err != nil {
+			return err
+		}
+		// 更新合同信息(软件不需要判断 软件运维开始时间 是否存在,因为理论上一个合同只有一条软件交付工单记录)
+		endTime := req.SoftwareCheckTime.AddDate(contract.SoftwareMaintenanceLimit, 0, 0)
+		_, err = tx.Update("ctr_contract", g.Map{
+			"software_maintenance_begin_time": req.SoftwareCheckTime,
+			"software_maintenance_end_time":   endTime,
+			"updated_by":                      s.userInfo.Id,
+			"updated_name":                    s.userInfo.NickName,
+			"updated_time":                    gtime.Now(),
+		}, fmt.Sprintf("id='%v'", req.ContractId))
+
 		return err
-	}
-	// 更新合同信息
-	endTime := req.SoftwareCheckTime.AddDate(contract.SoftwareMaintenanceLimit, 0, 0)
-	_, err = s.ContractDao.Update(g.Map{
-		"software_maintenance_begin_time": req.SoftwareCheckTime,
-		"software_maintenance_end_time":   endTime,
-		"updated_by":                      s.userInfo.Id,
-		"updated_name":                    s.userInfo.NickName,
-		"updated_time":                    gtime.Now(),
-	}, fmt.Sprintf("id='%v'", req.ContractId))
+	})
 
 	return err
 }
@@ -920,7 +936,7 @@ func (s DeliverOrderProgressService) ChangeSoftwareDeliverTime(ctx context.Conte
 		log.OpnDate = gtime.Now()
 		log.OpnType = "要求交付时间变更"
 		log.Remark = req.ChangeReason
-		if progress.SoftwareRequiredDeliveryTime != nil {
+		if progress.SoftwareRequiredDeliveryTime != nil && !progress.SoftwareRequiredDeliveryTime.IsZero() {
 			log.OpnContent = fmt.Sprintf("要求交付时间由%v变更为%v", progress.SoftwareRequiredDeliveryTime.Format("Y-m-d"), req.DeliveryTime.Format("Y-m-d"))
 		} else {
 			log.OpnContent = fmt.Sprintf("要求交付时间由[空]变更为%v", req.DeliveryTime.Format("Y-m-d"))