沈阳玫苑物业管理后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

449 lines
14 KiB

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
}