123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495 |
- package final
- import (
- "errors"
- "fmt"
- "math"
- "zhiyuan/pkg/db"
- "zhiyuan/pkg/logger"
- "zhiyuan/pkg/utils"
- "zhiyuan/pkg/weixin/mp"
- "zhiyuan/services/admin"
- "github.com/gin-gonic/gin"
- )
- type FinalSettleProcess struct {
- ID int64 `json:"id" prop:"add:false"`
- SettleId int64 `json:"settle_id" label:"结算ID" type:"int"`
- CollectId int64 `json:"collect_id" label:"汇总" type:"int"`
- Explain string `json:"explain" label:"说明" type:"string" search:"like"`
- Pictures string `json:"pictures" label:"图片" type:"string" search:"like"`
- Type int64 `json:"type" label:"类型" type:"int" prop:"add" default:"0"`
- Signature string `json:"signature" label:"签名" prop:"add" type:"string"`
- Total float64 `json:"total" label:"金额" type:"float" default:"0"`
- State int64 `json:"state" label:"状态" type:"int" prop:"add" default:"0"`
- CreatedId int64 `json:"created_id" label:"创建人员" type:"int" prop:"add:false" search:"="`
- CreatedName string `json:"created_name" prop:"add:false select:created.username"`
- CreatedPhone string `json:"created_phone" prop:"add:false select:created.phone"`
- CreatedHeadimgurl string `json:"created_headimgurl" prop:"add:false select:created.headimgurl"`
- DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"`
- CreatedAt int64 `json:"created_at" prop:"add:false"`
- UpdatedAt int64 `json:"updated_at" prop:"add:false"`
- db.BaseModel
- }
- func (FinalSettleProcess) TableName() string {
- return "zy_final_settle_process"
- }
- func (model FinalSettleProcess) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
- settle_id, _ := db.ToInt64(data["settle_id"])
- collect_id, _ := db.ToInt64(data["collect_id"])
- if settle_id != 0 && collect_id != 0 {
- s.Where = append(s.Where, fmt.Sprintf("`%s`.`settle_id` = %s OR `%s`.`collect_id` = %s", model.TableName(), s.Param(settle_id), model.TableName(), s.Param(collect_id)))
- } else if settle_id != 0 {
- s.Where = append(s.Where, fmt.Sprintf("`%s`.`settle_id` = %s", model.TableName(), s.Param(settle_id)))
- } else if collect_id != 0 {
- s.Where = append(s.Where, fmt.Sprintf("`%s`.`collect_id` = %s", model.TableName(), s.Param(collect_id)))
- }
- return true
- }
- func (FinalSettleProcess) OnePrivilege(c *gin.Context, id int64) bool {
- return true
- }
- func SendSettleMessage(adminID int, settleId int64, address string, text string) error {
- logger.Sugar.Infof("SendSettleMessage, send: %v %v %v %v", adminID, settleId, address, text)
- client, err := mp.NewClient(1)
- if err != nil {
- return err
- }
- adminInfo, err := admin.GetInfoByID(adminID, nil, nil)
- if err != nil {
- return err
- }
- if adminInfo == nil || adminInfo.OpenId == "" {
- return nil
- }
- url := ""
- if settleId != 0 {
- url = "https://jz.nczyzs.com/final/#/settle/" + db.ToString(settleId)
- }
- ret, err := client.SendTemplateMessage(adminInfo.OpenId, "0tdzToVtXoCUrafmN-ub9J69HKKCfUWEsCan-WkuPKk", url, map[string]interface{}{
- "character_string1": map[string]interface{}{
- "value": utils.SubStr(db.ToString(settleId), 0, 32),
- },
- "thing2": map[string]interface{}{
- "value": utils.SubStr(address, 0, 20),
- },
- "thing5": map[string]interface{}{
- "value": utils.SubStr(text, 0, 20),
- },
- })
- logger.Sugar.Infof("SendMaterialMessage, ret: %v %v", ret, err)
- return err
- }
- func (FinalSettleProcess) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error {
- data["created_id"] = c.GetInt("adminID")
- typ, _ := db.ToInt64(data["type"])
- siteID, _ := db.ToInt64(post["site_id"])
- settleID, _ := db.ToInt64(data["settle_id"])
- collectID, _ := db.ToInt64(data["collect_id"])
- state, _ := db.ToInt64(data["state"])
- total, _ := db.ToFloat64(data["total"])
- pictures := db.ToString(post["pictures"])
- if siteID != 0 {
- if pictures == "" {
- return errors.New("请上传业主签字的竣工结算单")
- }
- var model FinalSite
- db.GetModel(map[string]interface{}{
- "id": siteID,
- }, &model)
- totals := float64(0)
- managerPrice := float64(0)
- prices := make([]FinalManagerPrice, 0)
- db.GetModel(map[string]interface{}{
- "site_id": siteID,
- "deleted_at": 0,
- }, &prices)
- if len(prices) == 0 {
- return errors.New("未录承包额")
- }
- for _, v := range prices {
- managerPrice += v.Price
- }
- /*changePrice := float64(0)
- changes := make([]FinalSiteChange, 0)
- db.GetModel(map[string]interface{}{
- "site_id": siteID,
- "deleted_at": 0,
- }, &changes)
- for _, v := range changes {
- if v.Type == 1 {
- if v.Type2 == 1 {
- changePrice += v.Amount
- } else if v.Type2 == 2 {
- changePrice -= v.Amount
- }
- }
- }*/
- workerPrice := float64(0)
- type FinalSiteTableCollects struct {
- ShopId int64 `json:"shop_id" label:"门店" type:"int" prop:"select:finalsite.shop_id" search:"="`
- Total float64 `json:"total" label:"合计" prop:"select:finalsiteitem.total"`
- State int64 `json:"state" label:"状态" type:"int"`
- Deduct int64 `json:"deduct" type:"int" prop:"select:finaltype.deduct"`
- FinalSiteTableCollect
- }
- models := make([]FinalSiteTableCollects, 0)
- db.GetModel(map[string]interface{}{
- "site_id": siteID,
- "deleted_at": 0,
- }, &models)
- //if len(models) == 0 {
- // return errors.New("没有权限")
- //}
- for _, v := range models {
- if v.State == -1 {
- continue
- }
- if v.State < 3 {
- return errors.New("工人结算未完成")
- }
- if v.Deduct == 0 {
- workerPrice += v.Total
- }
- }
- auxiliaryPrice := float64(0)
- type FinalMaterialCollects struct {
- Budget float64 `json:"budget" label:"预算" type:"float" prop:"edit" default:"0"`
- State int64 `json:"state" label:"状态" type:"int"`
- FinalMaterialMobile
- }
- materials := make([]FinalMaterialCollects, 0)
- db.GetModel(map[string]interface{}{
- "site_id": siteID,
- "deleted_at": 0,
- }, &materials)
- //if len(materials) == 0 {
- // return errors.New("没有权限")
- //}
- for _, v := range materials {
- if v.Budget != 0 && v.State != 1 {
- return errors.New("辅材未下单")
- }
- }
- orders := make([]FinalMaterialOrder, 0)
- db.GetModel(map[string]interface{}{
- "site_id": siteID,
- "deleted_at": 0,
- }, &orders)
- for _, v := range orders {
- if v.State == -1 {
- continue
- }
- if v.State != 7 && v.State != 11 && v.State != 12 {
- return errors.New("材料订单未完成")
- }
- if v.Type == 0 {
- auxiliaryPrice += v.Total
- }
- }
- //managerPrice = managerPrice + changePrice*0.9*0.65
- totals = math.Round(managerPrice - workerPrice - auxiliaryPrice)
- settleid, err := db.InsertModel(db.Type(FinalSettle{}), map[string]interface{}{
- "site_id": siteID,
- "manager_id": model.ManagerId,
- "total": totals,
- "manager_price": managerPrice,
- "worker_price": workerPrice,
- "auxiliary_price": auxiliaryPrice,
- "state": 1,
- })
- if err == nil {
- data["settle_id"] = settleid
- } else {
- return errors.New("没有权限")
- }
- } else if settleID != 0 {
- var model FinalSettle
- db.GetModel(map[string]interface{}{
- "id": settleID,
- }, &model)
- if model.ID == 0 || model.State != typ {
- return errors.New("没有权限")
- }
- s := model.State + 1
- if s > 4 {
- return errors.New("没有权限")
- }
- data = map[string]interface{}{
- "state": s,
- }
- if state == 0 {
- if typ == 0 {
- if pictures == "" {
- return errors.New("请上传业主签字的竣工结算单")
- }
- totals := float64(0)
- managerPrice := float64(0)
- prices := make([]FinalManagerPrice, 0)
- db.GetModel(map[string]interface{}{
- "site_id": model.SiteId,
- "deleted_at": 0,
- }, &prices)
- if len(prices) == 0 {
- return errors.New("未录承包额")
- }
- for _, v := range prices {
- managerPrice += v.Price
- }
- /*changePrice := float64(0)
- changes := make([]FinalSiteChange, 0)
- db.GetModel(map[string]interface{}{
- "site_id": siteID,
- "deleted_at": 0,
- }, &changes)
- for _, v := range changes {
- if v.Type == 1 {
- if v.Type2 == 1 {
- changePrice += v.Amount
- } else if v.Type2 == 2 {
- changePrice -= v.Amount
- }
- }
- }*/
- workerPrice := float64(0)
- type FinalSiteTableCollects struct {
- ShopId int64 `json:"shop_id" label:"门店" type:"int" prop:"select:finalsite.shop_id" search:"="`
- Total float64 `json:"total" label:"合计" prop:"select:finalsiteitem.total"`
- State int64 `json:"state" label:"状态" type:"int"`
- Deduct int64 `json:"deduct" type:"int" prop:"select:finaltype.deduct"`
- FinalSiteTableCollect
- }
- models := make([]FinalSiteTableCollects, 0)
- db.GetModel(map[string]interface{}{
- "site_id": model.SiteId,
- "deleted_at": 0,
- }, &models)
- //if len(models) == 0 {
- // return errors.New("没有权限")
- //}
- for _, v := range models {
- if v.State == -1 {
- continue
- }
- if v.State != 5 {
- return errors.New("工人结算未完成")
- }
- if v.Deduct == 0 {
- workerPrice += v.Total
- }
- }
- auxiliaryPrice := float64(0)
- type FinalMaterialCollects struct {
- Budget float64 `json:"budget" label:"预算" type:"float" prop:"edit" default:"0"`
- State int64 `json:"state" label:"状态" type:"int"`
- FinalMaterialMobile
- }
- materials := make([]FinalMaterialCollects, 0)
- db.GetModel(map[string]interface{}{
- "site_id": model.SiteId,
- "deleted_at": 0,
- }, &materials)
- //if len(materials) == 0 {
- // return errors.New("没有权限")
- //}
- for _, v := range materials {
- if v.Budget != 0 && v.State != 1 {
- return errors.New("辅材未下单")
- }
- }
- orders := make([]FinalMaterialOrder, 0)
- db.GetModel(map[string]interface{}{
- "site_id": model.SiteId,
- "deleted_at": 0,
- }, &orders)
- for _, v := range orders {
- if v.State == -1 {
- continue
- }
- if v.State != 7 && v.State != 11 && v.State != 12 {
- return errors.New("材料订单未完成")
- }
- if v.Type == 0 {
- auxiliaryPrice += v.Total
- }
- }
- //managerPrice = managerPrice + changePrice*0.9*0.65
- totals = math.Round(managerPrice - workerPrice - auxiliaryPrice)
- data["total"] = totals
- data["manager_price"] = managerPrice
- data["worker_price"] = workerPrice
- data["auxiliary_price"] = auxiliaryPrice
- }
- if typ == 1 {
- data["subsidy_price"] = total
- data["total"] = math.Round(model.ManagerPrice - model.WorkerPrice - model.AuxiliaryPrice + total)
- }
- } else {
- data["state"] = 0
- }
- err := db.UpdateModel(db.Type(model), settleID, data)
- if err != nil {
- return errors.New("没有权限")
- }
- } else if collectID != 0 {
- var model FinalSiteCollect
- db.GetModel(map[string]interface{}{
- "id": collectID,
- }, &model)
- if model.ID == 0 || model.State+1 != typ {
- return errors.New("没有权限")
- }
- if state != 0 {
- return errors.New("没有权限")
- }
- s := model.State + 1
- err := db.UpdateModel(db.Type(model), collectID, map[string]interface{}{
- "state": s,
- })
- if err != nil {
- return errors.New("没有权限")
- }
- err = db.UpdateModels(db.Type(FinalSettle{}), map[string]interface{}{
- "collect_id": collectID,
- }, map[string]interface{}{
- "state": s + 1,
- })
- if err != nil {
- return errors.New("没有权限")
- }
- } else {
- return errors.New("没有权限")
- }
- return nil
- }
- func (FinalSettleProcess) AddAfter(c *gin.Context, id int64, post map[string]interface{}, data map[string]interface{}) {
- var process FinalSettleProcess
- db.GetModel(map[string]interface{}{
- "id": id,
- "deleted_at": 0,
- }, &process)
- if process.Type == 0 || process.Type == 1 {
- var model FinalSettle
- db.GetModel(map[string]interface{}{
- "id": process.SettleId,
- }, &model)
- if model.ID != 0 {
- var site FinalSite
- db.GetModel(map[string]interface{}{
- "id": model.SiteId,
- "deleted_at": 0,
- }, &site)
- address := site.Address
- if site.Village != " " {
- address += " " + site.Village
- }
- if site.RoomNo != " " {
- address += " " + site.RoomNo
- }
- if process.Type == 0 {
- SendSettleMessage(599, model.ID, address, "项目经理已申请结算,请操作回访")
- //SendSettleMessage(54, model.ID, address, "项目经理已申请结算,请操作回访")
- SendSettleMessage(1557, model.ID, address, "项目经理已申请结算,请操作回访")
- } else if process.Type == 1 {
- if process.State == 0 {
- SendSettleMessage(int(site.ManagerId), model.ID, address, "请确认结算金额")
- } else {
- SendSettleMessage(int(site.ManagerId), model.ID, address, "已驳回,请重新提交")
- }
- }
- }
- }
- }
- func (FinalSettleProcess) Page() bool {
- return false
- }
- func (model FinalSettleProcess) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
- return []db.JoinModel{
- {
- Model: JoinAdmin{},
- As: "created",
- On: []string{"`created`.`id` = " + model.TableName() + ".`created_id`"},
- },
- }
- }
|