|
|
@@ -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"))
|