/** * @Author: zou.yingbin * @Create : 2021/1/7 17:31 * @Modify : 2021/1/7 17:31 */ package models import ( "crypto/aes" "encoding/hex" "fmt" "mtp2_if/db" "mtp2_if/logger" ) // 客户资料结构 type ErmcpUserModel struct { USERID int `json:"userid" xorm:"'USERID'"` // 用户ID MEMBERUSERID int `json:"memberuserid" xorm:"'MEMBERUSERID'"` //所属机构ID USERINFOTYPE string `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 客户类型 CUSTOMERNAME string `json:"customername" xorm:"'CUSTOMERNAME'"` // 企业名称 CARDTYPE string `json:"cardtype" xorm:"'CARDTYPE'"` // 证件类型 CARDNUM string `json:"cardnum" xorm:"'CARDNUM'"` // 证件号码 MOBILE string `json:"mobile" xorm:"'MOBILE'"` // 手机号码 TELPHONE string `json:"telphone" xorm:"'TELPHONE'"` // 联系电话 ADDRESS string `json:"address" xorm:"'ADDRESS'"` // 通讯地址 REMARK string `json:"remark" xorm:"'REMARK'"` // 备注 Status string `json:"status" xorm:"'STATUS'"` // 账户状态 } func (r *ErmcpUserModel) buildSql(accStatus string) string { str := "select t.userid," + " t.memberuserid," + " u.USERINFOTYPE," + " u.CUSTOMERNAME," + " u.CARDTYPEID," + " e.enumdicname CARDTYPE," + " u.CARDNUM," + " u.MOBILE," + " u.TELPHONE," + " u.ADDRESS," + " u.REMARK," + " t.accountstatus," + " decode(t.accountstatus,1,'待激活',2,'待审核',3,'待复审',4,'正常',5,'审核拒绝',6,'注销','缺省') Status" + " from useraccount t" + " left join userinfo u" + " on t.userid = u.userid" + " left join enumdicitem e" + " on u.cardtypeid = e.enumitemname" + " and e.enumdiccode = 'certificatetype'" + " where t.usertype=6 and t.accountstatus in (%v) and t.memberuserid=%v" return fmt.Sprintf(str, accStatus, r.MEMBERUSERID) } // 解密卡号和电话号码字段 func (r *ErmcpUserModel) DecryptField() { key := "0d299ce2d4105282f7471074cb0f9f9d" key2, _ := hex.DecodeString(key) b, _ := aes.NewCipher(key2) fd := func(str string) string { if str == "" { return str } d, _ := hex.DecodeString(str) b.Decrypt(d, d) if len(d) >= 16 { if cnt := d[len(d)-1]; int(cnt) < len(d) { d = d[:len(d)-int(cnt)] } return string(d) } return str } r.CARDNUM = fd(r.CARDNUM) r.MOBILE = fd(r.MOBILE) } // 查询客户资料 func (r *ErmcpUserModel) GetData(accStatus string) ([]ErmcpUserModel, error) { sData := make([]ErmcpUserModel, 0) e := db.GetEngine() s := e.SQL(r.buildSql(accStatus)) if err := s.Find(&sData); err != nil { logger.GetLogger().Errorf("ermcp query fail:%v", err) return sData, err } // 解密 for i := range sData { sData[i].DecryptField() } return sData, nil }