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
|
|
}
|