package cases import ( "spaceofcheng/services/models" "spaceofcheng/services/models/goods" "spaceofcheng/services/models/model" "spaceofcheng/services/utils" "strconv" "strings" "time" ) // CaseRecord 月订单记录 type CaseRecord struct { model.SysCaseRecord `xorm:"extends"` ActrualNum int OverNum int LeftNum int } const ( ISOVER = 1 ISNOOVER = 0 ) // GetCaseRecord 获取案场月记录 func (m *CaseDAO) GetCaseRecord(caseids string, page, pageSize int) ([]CaseRecord, error) { var records []CaseRecord sql := `select * from sys_case_record where case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and status=` + strconv.Itoa(models.STATUS_NORMAL) + ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize) err := m.db.Sql(sql).Find(&records) if err != nil { return nil, err } for inx, record := range records { orders := new(model.TaGoodsOrders) total, err := m.db.Where("case_id=?", record.CaseId). And("status=?", models.STATUS_NORMAL). And("user_type in ('"+goods.USERTPE_SALES+"','"+goods.USERTYPE_MANAGER+"')"). And("date_format(create_date,'%Y-%m')=?", record.Month). And("make_status !=?", "cancel"). And("pay_type = ?", models.CONSUME_INNER). Sums(orders, "orders_num") if err != nil { return nil, err } records[inx].ActrualNum = int(total[0]) var overnum int var leftnum int if records[inx].ActrualNum > record.Num { overnum = records[inx].ActrualNum - record.Num } else { leftnum = record.Num - records[inx].ActrualNum } records[inx].OverNum = overnum records[inx].LeftNum = leftnum } return records, err } // GetCaseRecordCount 获取月记录 func (m *CaseDAO) GetCaseRecordCount(caseids string) (int, error) { var records []CaseRecord sql := `select * from sys_case_record where case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and status>` + strconv.Itoa(models.STATUS_DEL) err := m.db.Sql(sql).Find(&records) if err != nil { return 0, err } return len(records), nil } // AddRecord 新增案场月记录信息 func (m *CaseDAO) AddRecord(record model.SysCaseRecord) (*model.SysCaseRecord, error) { record.CreateDate = time.Now() record.RecordId = utils.GetGUID() record.Status = models.STATUS_NORMAL record.IsOver = ISOVER _, err := m.db.Insert(record) return &record, err } // GetRecordByMonth 根据月份获取月记录信息 func (m *CaseDAO) GetRecordByMonth(caseid, month string) (*model.SysCaseRecord, error) { var record []model.SysCaseRecord sql := `select * from sys_case_record where case_id=? and status=? and month=?` err := m.db.Sql(sql, caseid, models.STATUS_NORMAL, month).Find(&record) if err != nil { return nil, err } if len(record) > 0 { return &record[0], nil } return nil, nil } // GetRecordByID 根据id获取月记录 func (m *CaseDAO) GetRecordByID(recordid string) (*CaseRecord, error) { var records []CaseRecord sql := `select * from sys_case_record where record_id='` + recordid + `'` err := m.db.Sql(sql).Find(&records) if err != nil { return nil, err } if len(records) > 0 { var record = records[0] info, err := m.GetRecordWithNum(record) return info, err } return nil, nil } // GetRecordWithNum 获取月记录对应信息 func (m *CaseDAO) GetRecordWithNum(record CaseRecord) (*CaseRecord, error) { orders := new(model.TaGoodsOrders) total, err := m.db.Where("case_id=?", record.CaseId).And("status=?", models.STATUS_NORMAL).And("user_type=?", goods.USERTPE_SALES).And("date_format(create_date,'%Y-%m')=?", record.Month).Sums(orders, "orders_num") if err != nil { return nil, err } record.ActrualNum = int(total[0]) var overnum int var leftnum int if record.ActrualNum > record.Num { overnum = record.ActrualNum - record.Num } else { leftnum = record.Num - record.ActrualNum } record.OverNum = overnum record.LeftNum = leftnum return &record, err } // GetRecordByCase 获取案场当月记录信息 func (m *CaseDAO) GetRecordByCase(caseid string) (*CaseRecord, error) { var records []CaseRecord sql := `select * from sys_case_record where month = date_format(NOW(),'%Y-%m') and case_id='` + caseid + `'` err := m.db.Sql(sql).Find(&records) if err != nil { return nil, err } if len(records) > 0 { var record = records[0] info, err := m.GetRecordWithNum(record) return info, err } return nil, nil }