package models import ( "errors" "fmt" "lapp_-wy/db" "lapp_-wy/utils" "lapp_-wy/web/middleware/glog" "strings" "time" "xorm.io/core" ) type Contracttab struct { Cid int `json:"cid" xorm:"not null pk INT(4)"` Contractid string `json:"contractid" xorm:"not null pk VARCHAR(128)"` Chargetype int `json:"chargetype" xorm:"SMALLINT(2)"` Linkman string `json:"linkman" xorm:"VARCHAR(20)"` Mobile string `json:"mobile" xorm:"VARCHAR(20)"` Linkadress string `json:"linkadress" xorm:"VARCHAR(128)"` Begdate string `json:"begdate" xorm:"VARCHAR(20)"` Enddate string `json:"enddate" xorm:"VARCHAR(20)"` Createtime string `json:"createtime" xorm:"VARCHAR(20)"` Chargeway string `json:"chargeway" xorm:"VARCHAR(100)"` Createby string `json:"createby" xorm:"VARCHAR(20)"` Lengthdate int `json:"lengthdate" xorm:"INT(4)"` Chargableexpense float64 `json:"chargableexpense" xorm:"DECIMAL(10,2)"` Chargedexpense float64 `json:"chargedexpense" xorm:"DECIMAL(10,2)"` Remake string `json:"remake" xorm:"VARCHAR(255)"` Serialnumber string `json:"serialnumber" xorm:"VARCHAR(32)"` Chargetime string `json:"chargetime" xorm:"VARCHAR(20)"` } func (t *Contracttab) TableName() string { return "contracttab" } // 清除string字段的右侧空格 func (t *Contracttab) Clipped() { utils.TrimStruct(t, *t) } //增加合同(同时添加缴费记录) func (t *Contracttab) Add(me *ContractInfo, lengthdate float64) error { engine := db.MasterEngine() session := engine.NewSession() defer session.Close() // add Begin() before any action err := session.Begin() if err != nil { session.Rollback() return err } //生成合同号 conId := new(Snrtab) conId.Cid = t.Cid contractId, err := conId.GetNextSnr("conId") if err != nil { session.Rollback() return err } //生成流水号 numId := new(Snrtab) numId.Cid = t.Cid serialnumber, err := numId.GetNextSnr("Serialnumber") if err != nil { session.Rollback() return err } t.Serialnumber = serialnumber t.Contractid = contractId if utils.ValueIsEmpty(t.Begdate) { t.Begdate = utils.TimeFormat(time.Now(), "yyyy-MM-dd") //根据缴费金额计算出截止日期 addlenght := fmt.Sprintf("%0.2f", lengthdate) addmonths := strings.Split(addlenght, ".") adds := utils.ValueToFloat(addmonths[1], 0.0) * 0.3 adddays := utils.ValueToInt(adds, 0) - 1 endTime := time.Now().AddDate(0, utils.ValueToInt(addmonths[0], 0), adddays) t.Enddate = utils.TimeFormat(endTime, "yyyy-MM-dd") } else { begtime, _ := utils.TimeParseyyyyMMdd(t.Begdate) //根据缴费金额计算出截止日期 addlenght := fmt.Sprintf("%0.2f", lengthdate) addmonths := strings.Split(addlenght, ".") adds := utils.ValueToFloat(addmonths[1], 0.0) * 0.3 adddays := utils.ValueToInt(adds, 0) - 1 endTime := begtime.AddDate(0, utils.ValueToInt(addmonths[0], 0), adddays) t.Enddate = utils.TimeFormat(endTime, "yyyy-MM-dd") fmt.Println("t.endate:",t.Enddate) } _, err = session.Table("contracttab").Insert(t) if err != nil { session.Rollback() return err } switch t.Chargetype { case 1: //物业费 //更新物业表 _, err := session.Table("propertytab").Where("cid = ? and propertyid = ?", t.Cid, me.Propertyid).Update(map[string]interface{}{"contractid": contractId}) if err != nil { glog.InfoExtln("导入记录错误日志", "err3", err) session.Rollback() return err } //生成流水号 chargenr := new(Snrtab) chargenr.Cid = t.Cid cnr, err := chargenr.GetNextSnr("Chargenr") if err != nil { glog.InfoExtln("导入记录错误日志", "err4", err) session.Rollback() return err } //添加记录 charge := new(Chargetab) charge.Propertyid = me.Propertyid charge.Cid = t.Cid charge.Chargetype = t.Chargetype charge.Info = t.Remake charge.Createtime = t.Createtime charge.Lastmodifyby = t.Createby charge.Lastmodifytime = t.Createtime charge.Chargableexpense = t.Chargableexpense charge.Chargedexpense = t.Chargedexpense charge.Chargetime = me.Chargetime charge.Chargeby = t.Createby charge.Chargeway = t.Chargeway charge.Serialnumber = serialnumber charge.Chargenr = utils.ValueToInt(cnr, 0) charge.Chargestartdate = t.Begdate charge.Chargeenddate = t.Enddate _, err = session.Table("chargetab").Insert(charge) if err != nil { session.Rollback() return err } result := ChargeShareTheMonth(session, charge.Cid, charge.Chargenr, charge.Chargestartdate, charge.Chargeenddate, charge.Chargedexpense) if !result { session.Rollback() return errors.New("分摊费用计算错误") } case 2: //电梯费 //更新电梯费 _, err := session.Table("accesscardtab").Where("cid = ? and accesscardid = ?", t.Cid, me.Accesscardid).Update(map[string]interface{}{"contractid": contractId}) if err != nil { session.Rollback() return err } //生成流水号 chargenr := new(Snrtab) chargenr.Cid = t.Cid cnr, err := chargenr.GetNextSnr("Chargenr") if err != nil { session.Rollback() return err } //添加记录 charge := new(Chargetab) charge.Propertyid = me.Propertyid charge.Accesscardid = me.Accesscardid charge.Cid = t.Cid charge.Chargetype = t.Chargetype charge.Info = t.Remake charge.Createtime = t.Createtime charge.Lastmodifyby = t.Createby charge.Lastmodifytime = t.Createtime charge.Chargableexpense = t.Chargableexpense charge.Chargedexpense = t.Chargedexpense charge.Chargeby = t.Createby charge.Chargetime = me.Chargetime charge.Chargeway = t.Chargeway charge.Serialnumber = serialnumber charge.Chargenr = utils.ValueToInt(cnr, 0) charge.Chargestartdate = t.Begdate charge.Chargeenddate = t.Enddate _, err = session.Table("chargetab").Insert(charge) if err != nil { session.Rollback() return err } result := ChargeShareTheMonth(session, charge.Cid, charge.Chargenr, charge.Chargestartdate, charge.Chargeenddate, charge.Chargedexpense) if !result { session.Rollback() return errors.New("分摊费用计算错误") } case 3: //车位费 //更新车位表 _, err := session.Table("carporttab").Where("cid = ? and carportid = ?", t.Cid, me.Carportid).Update(map[string]interface{}{"contractid": contractId}) if err != nil { session.Rollback() return err } //生成流水号 chargenr := new(Snrtab) chargenr.Cid = t.Cid cnr, err := chargenr.GetNextSnr("Chargenr") if err != nil { session.Rollback() return err } //添加记录 charge := new(Chargetab) charge.Propertyid = me.Propertyid charge.Carportid = me.Carportid charge.Cid = t.Cid charge.Chargetype = t.Chargetype charge.Info = t.Remake charge.Createtime = t.Createtime charge.Lastmodifyby = t.Createby charge.Lastmodifytime = t.Createtime charge.Chargableexpense = t.Chargableexpense charge.Chargedexpense = t.Chargedexpense charge.Chargeby = t.Createby charge.Chargetime = me.Chargetime charge.Chargeway = t.Chargeway charge.Serialnumber = serialnumber charge.Chargenr = utils.ValueToInt(cnr, 0) charge.Chargestartdate = t.Begdate charge.Chargeenddate = t.Enddate _, err = session.Table("chargetab").Insert(charge) if err != nil { session.Rollback() return err } result := ChargeShareTheMonth(session, charge.Cid, charge.Chargenr, charge.Chargestartdate, charge.Chargeenddate, charge.Chargedexpense) if !result { session.Rollback() return errors.New("分摊费用计算错误") } default: } err = session.Commit() if err != nil { return err } return nil } //续签合同 func (t *Contracttab) Update(me *ContractInfo, lengthdate float64) error { fmt.Println("lengthDate:", lengthdate) engine := db.MasterEngine() session := engine.NewSession() defer session.Close() // add Begin() before any action err := session.Begin() if err != nil { return err } //生成流水号 numId := new(Snrtab) numId.Cid = t.Cid serialnumber, err := numId.GetNextSnr("Serialnumber") if err != nil { session.Rollback() return err } t.Serialnumber = serialnumber if utils.ValueIsEmpty(t.Begdate) { fmt.Println("deal here") begtime, _ := utils.TimeParseyyyyMMdd(t.Enddate) Begdate := begtime.AddDate(0, 0, 1) t.Begdate = utils.TimeFormat(Begdate, "yyyy-MM-dd") //根据缴费金额计算出截止日期 addlenght := fmt.Sprintf("%0.2f", lengthdate) addmonths := strings.Split(addlenght, ".") adds := utils.ValueToFloat(addmonths[1], 0.0) * 0.3 adddays := utils.ValueToInt(adds, 0) - 1 endTime := begtime.AddDate(0, utils.ValueToInt(addmonths[0], 0), adddays) t.Enddate = utils.TimeFormat(endTime, "yyyy-MM-dd") } else { fmt.Println("deal here2") fmt.Println("t.Begdate:", t.Begdate) begtime, _ := utils.TimeParseyyyyMMdd(t.Begdate) fmt.Println("begtime:", begtime) //根据缴费金额计算出截止日期 databaseBegtime, _ := utils.TimeParseyyyyMMdd(t.Enddate) databaseBegtime = databaseBegtime.AddDate(0, 0, 1) if begtime.Before(databaseBegtime) { begtime = databaseBegtime } t.Begdate = utils.TimeFormat(begtime, "yyyy-MM-dd") addlenght := fmt.Sprintf("%0.2f", lengthdate) fmt.Println("addlenght:", addlenght) addmonths := strings.Split(addlenght, ".") fmt.Println("addmonths:", addlenght) adds := utils.ValueToFloat(addmonths[1], 0.0) * 0.3 fmt.Println("adds:", adds) adddays := utils.ValueToInt(adds, 0) - 1 fmt.Println("adddays:", adddays) endTime := begtime.AddDate(0, utils.ValueToInt(addmonths[0], 0), adddays) t.Enddate = utils.TimeFormat(endTime, "yyyy-MM-dd") fmt.Println("begine date:", t.Begdate) fmt.Println("enddate:", t.Enddate) } _, err = session.Table("contracttab").Cols("linkman", "mobile", "begdate", "enddate", "createtime", "createby", "lengthdate", "chargableexpense", "chargedexpense", "remake", "chargetime", "chargeway", "serialnumber").Where("cid = ? and contractid = ?", t.Cid, t.Contractid).Update(t) if err != nil { session.Rollback() return err } switch t.Chargetype { case 1: //物业费 //生成流水号 chargenr := new(Snrtab) chargenr.Cid = t.Cid cnr, err := chargenr.GetNextSnr("Chargenr") if err != nil { session.Rollback() return err } //添加记录 charge := new(Chargetab) charge.Propertyid = me.Propertyid charge.Cid = t.Cid charge.Chargetype = t.Chargetype charge.Info = t.Remake charge.Createtime = t.Createtime charge.Lastmodifyby = t.Createby charge.Lastmodifytime = t.Createtime charge.Chargableexpense = t.Chargableexpense charge.Chargedexpense = t.Chargedexpense charge.Chargeby = t.Createby charge.Chargetime = me.Chargetime charge.Chargeway = t.Chargeway charge.Serialnumber = serialnumber charge.Chargenr = utils.ValueToInt(cnr, 0) charge.Chargestartdate = t.Begdate charge.Chargeenddate = t.Enddate _, err = session.Table("chargetab").Insert(charge) if err != nil { session.Rollback() return err } result := ChargeShareTheMonth(session, charge.Cid, charge.Chargenr, charge.Chargestartdate, charge.Chargeenddate, charge.Chargedexpense) if !result { session.Rollback() return errors.New("分摊费用计算错误") } case 2: //电梯费 //生成流水号 chargenr := new(Snrtab) chargenr.Cid = t.Cid cnr, err := chargenr.GetNextSnr("Chargenr") if err != nil { session.Rollback() return err } //添加记录 charge := new(Chargetab) charge.Propertyid = me.Propertyid charge.Accesscardid = me.Accesscardid charge.Cid = t.Cid charge.Chargetype = t.Chargetype charge.Info = t.Remake charge.Createtime = t.Createtime charge.Lastmodifyby = t.Createby charge.Lastmodifytime = t.Createtime charge.Chargableexpense = t.Chargableexpense charge.Chargedexpense = t.Chargedexpense charge.Chargeby = t.Createby charge.Chargetime = me.Chargetime charge.Chargeway = t.Chargeway charge.Serialnumber = serialnumber charge.Chargenr = utils.ValueToInt(cnr, 0) charge.Chargestartdate = t.Begdate charge.Chargeenddate = t.Enddate _, err = session.Table("chargetab").Insert(charge) if err != nil { session.Rollback() return err } result := ChargeShareTheMonth(session, charge.Cid, charge.Chargenr, charge.Chargestartdate, charge.Chargeenddate, charge.Chargedexpense) if !result { session.Rollback() return errors.New("分摊费用计算错误") } case 3: //车位费 //生成流水号 chargenr := new(Snrtab) chargenr.Cid = t.Cid cnr, err := chargenr.GetNextSnr("Chargenr") if err != nil { session.Rollback() return err } //添加记录 charge := new(Chargetab) charge.Propertyid = me.Propertyid charge.Carportid = me.Carportid charge.Cid = t.Cid charge.Chargetype = t.Chargetype charge.Info = t.Remake charge.Createtime = t.Createtime charge.Lastmodifyby = t.Createby charge.Lastmodifytime = t.Createtime charge.Chargableexpense = t.Chargableexpense charge.Chargedexpense = t.Chargedexpense charge.Chargeby = t.Createby charge.Chargetime = me.Chargetime charge.Chargeway = t.Chargeway charge.Serialnumber = serialnumber charge.Chargenr = utils.ValueToInt(cnr, 0) charge.Chargestartdate = t.Begdate charge.Chargeenddate = t.Enddate _, err = session.Table("chargetab").Insert(charge) if err != nil { session.Rollback() return err } result := ChargeShareTheMonth(session, charge.Cid, charge.Chargenr, charge.Chargestartdate, charge.Chargeenddate, charge.Chargedexpense) if !result { session.Rollback() return errors.New("分摊费用计算错误") } default: } err = session.Commit() if err != nil { return err } return nil } //查 func (t *Contracttab) SelectOne() (Contracttab, error) { e := db.MasterEngine() var data Contracttab _, err := e.ID(core.PK{t.Cid, t.Contractid}).Get(&data) if err != nil { return data, err } return data, nil }