qhj.go 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/6/1 14:14
  4. * @Modify : 2021/6/1 14:14
  5. */
  6. package models
  7. import (
  8. "fmt"
  9. "mtp2_if/db"
  10. "mtp2_if/mtpcache"
  11. "mtp2_if/utils"
  12. )
  13. // 大连千海金
  14. // QhjContract 千海金融资明细(合同)
  15. type QhjContract struct {
  16. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  17. SCFCONTRACTID int64 `json:"scfcontractid" xorm:"SCFCONTRACTID"` // SCF合同ID(310+Unix秒时间戳(10位)+xxxxxx)
  18. SCFCONTRACTTYPE int32 `json:"scfcontracttype" xorm:"SCFCONTRACTTYPE"` // 合同类型 - 1:仓单回购 2:仓单质押 3:合作套保 4:资金贷款 5:融资单
  19. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID [5:融资单]
  20. CONTRACTCONFIRMTIME string `json:"contractconfirmtime" xorm:"CONTRACTCONFIRMTIME"` // 合同确认时间(时间)
  21. WRQTY int32 `json:"wrqty" xorm:"WRQTY"` // 仓单数量(数量)
  22. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价格(成本价格)
  23. LENDERAMOUNT float64 `json:"lenderamount" xorm:"LENDERAMOUNT"` // 贷款金额(总额|订单总额)
  24. MARGINRATIO float64 `json:"marginratio" xorm:"MARGINRATIO"` // 保证金比率(首付比例)
  25. INITMARGIN float64 `json:"initmargin" xorm:"'INITMARGIN'"` // 初始保证金(首付款)
  26. RECOVEREDMARGIN float64 `json:"recoveredmargin" xorm:"'RECOVEREDMARGIN'"` // 已追缴保证金
  27. REMAINAMOUNT float64 `json:"remainamount" xorm:"'REMAINAMOUNT'"` // 合同剩余金额(融资额)
  28. TOTALINTEREST float64 `json:"totalinterest" xorm:"'TOTALINTEREST'"` // 已计总利息(利息)
  29. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  30. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  31. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 商品单位id
  32. PAYAMOUNT float64 `json:"payamount" xorm:"'PAYAMOUNT'"` // 已付(已付货款)
  33. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称
  34. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  35. }
  36. func (r *QhjContract) calc() {
  37. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  38. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
  39. // 已付(已付货款) = 已追缴保证金 + 初始保证金
  40. r.PAYAMOUNT = r.RECOVEREDMARGIN + r.INITMARGIN
  41. }
  42. func (r *QhjContract) buildSql() string {
  43. var sqlId utils.SQLVal = "select t.borroweruserid userid," +
  44. " t.scfcontractid," +
  45. " t.scfcontracttype," +
  46. " t.goodsid," +
  47. " to_char(t.contractconfirmtime, 'yyyy-mm-dd hh24:mi:ss') contractconfirmtime," +
  48. " t.wrqty," +
  49. " t.tradeprice," +
  50. " t.lenderamount," +
  51. " t.marginratio," +
  52. " s.initmargin," +
  53. " s.recoveredmargin," +
  54. " s.remainamount," +
  55. " s.totalinterest," +
  56. " g.goodscode," +
  57. " g.goodsname," +
  58. " g.goodunitid" +
  59. " from scf_contract t" +
  60. " left join scf_contractinfo s" +
  61. " on t.scfcontractid = s.scfcontractid" +
  62. " left join goods g" +
  63. " on t.goodsid = g.goodsid" +
  64. " where 1=1"
  65. sqlId.And("t.borroweruserid", r.USERID)
  66. sqlId.AndEx("t.SCFCONTRACTID", r.SCFCONTRACTID, r.SCFCONTRACTID > 0)
  67. return sqlId.String()
  68. }
  69. // GetDataEx 获取融资明细(合同)
  70. func (r *QhjContract) GetDataEx() (interface{}, error) {
  71. sData := make([]QhjContract, 0)
  72. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  73. for i := range sData {
  74. sData[i].calc()
  75. }
  76. return sData, err
  77. }
  78. // QhjContractLog 融资明细流水log
  79. type QhjContractLog struct {
  80. LOGID string `json:"logid" xorm:"LOGID"` // LogID(315+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  81. SCFCONTRACTID int64 `json:"scfcontractid" xorm:"SCFCONTRACTID"` // SCF合同ID(310+Unix秒时间戳(10位)+xxxxxx)
  82. AMOUNTTYPE int32 `json:"amounttype" xorm:"AMOUNTTYPE"` // 资金类型 - 1:首付款 2:尾款 3:利息 4:追加款
  83. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 支付金额
  84. REMAINAMOUNT float64 `json:"remainamount" xorm:"REMAINAMOUNT"` // 剩余货款
  85. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  86. FilterType string `json:"-"` // 资金类型
  87. }
  88. func (r *QhjContractLog) calc() {
  89. }
  90. func (r *QhjContractLog) buildSql() string {
  91. var sqlId utils.SQLVal = "SELECT t.LOGID," +
  92. " t.SCFCONTRACTID," +
  93. " t.AMOUNTTYPE," +
  94. " t.AMOUNT," +
  95. " t.REMAINAMOUNT," +
  96. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME" +
  97. " FROM SCF_CONTRACTAMOUNTLOG t" +
  98. " WHERE 1 = 1"
  99. sqlId.AndEx("t.SCFCONTRACTID", r.SCFCONTRACTID, r.SCFCONTRACTID > 0)
  100. sqlId.JoinEx(len(r.FilterType) > 0, fmt.Sprintf(" and t.AMOUNTTYPE in(%v)", r.FilterType))
  101. return sqlId.String()
  102. }
  103. // GetDataEx 获取融资明细流水log
  104. func (r *QhjContractLog) GetDataEx() (interface{}, error) {
  105. sData := make([]QhjContractLog, 0)
  106. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  107. for i := range sData {
  108. sData[i].calc()
  109. }
  110. return sData, err
  111. }
  112. // QhjRStrategy 定投规则策略
  113. type QhjRStrategy struct {
  114. REGULARLYCYCLE int32 `json:"regularlycycle" xorm:"REGULARLYCYCLE"` // 定投频率 - 1:每周 2:每月
  115. REGULARLYCYCLEVALUE string `json:"regularlycyclevalue" xorm:"REGULARLYCYCLEVALUE"` // 定投频率值 - 每周几(0-6) 或 每月几号(<=28)
  116. REGULARLYMODE int32 `json:"regularlymode" xorm:"REGULARLYMODE"` // 定投方式 - 1:按数量 2:按金额
  117. REGULARLYMODEVALUE float64 `json:"regularlymodevalue" xorm:"REGULARLYMODEVALUE"` // 定投方式值 - 数量或金额
  118. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  119. REGULARLYSTRATEGYSTATUS int32 `json:"regularlystrategystatus" xorm:"REGULARLYSTRATEGYSTATUS"` // 策略状态 - 1:正常 2:暂停 3:终止
  120. TRIGGERTOTALTIMES string `json:"triggertotaltimes" xorm:"TRIGGERTOTALTIMES"` // 累计定投总次数
  121. TRIGGERSUCCESSTIMES string `json:"triggersuccesstimes" xorm:"TRIGGERSUCCESSTIMES"` // 累计定投成功次数
  122. TRIGGERTOTALQTY float64 `json:"triggertotalqty" xorm:"TRIGGERTOTALQTY"` // 累计定投数量(成功) [按小数位放大值]
  123. TRIGGERTOTALAMOUNT float64 `json:"triggertotalamount" xorm:"TRIGGERTOTALAMOUNT"` // 累计定投金额(成功)
  124. LASTEFFECTTRADEDATE string `json:"lasteffecttradedate" xorm:"LASTEFFECTTRADEDATE"` // 最新生效交易日
  125. LASTSTOPTRADEDATE string `json:"laststoptradedate" xorm:"LASTSTOPTRADEDATE"` // 最新暂停交易日
  126. LASTTRIGGERTRADEDATE string `json:"lasttriggertradedate" xorm:"LASTTRIGGERTRADEDATE"` // 最新触发交易日
  127. NEXTTRIGGERDATE string `json:"nexttriggerdate" xorm:"NEXTTRIGGERDATE"` // 下次触发日期
  128. NEXTTRIGGERQTY float64 `json:"nexttriggerqty" xorm:"NEXTTRIGGERQTY"` // 下次触发数量 [按小数位放大值]
  129. NEXTTRIGGERAMOUNT float64 `json:"nexttriggeramount" xorm:"NEXTTRIGGERAMOUNT"` // 下次触发金额
  130. UPDATORID string `json:"updatorid" xorm:"UPDATORID"` // 更新人
  131. UPDATESRC int32 `json:"updatesrc" xorm:"UPDATESRC"` // 更新来源 - 1:管理端 2:终端
  132. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  133. REGULARLYSTRATEGYID int64 `json:"regularlystrategyid" xorm:"REGULARLYSTRATEGYID"` // 定投策略ID (SEQ_QHJ_REGULARLYSTRATEGY)
  134. USERID int64 `json:"userid" xorm:"USERID"` // 所属用户ID
  135. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 用户资金账户
  136. GOODSID string `json:"goodsid" xorm:"GOODSID"` // 定投商品ID
  137. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 定投商品代码
  138. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 定投商品名称
  139. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 定投商品单位id
  140. CURRENCYID int32 `json:"currencyid" xorm:"'CURRENCYID'"` // 币种id
  141. USERNAME string `json:"username"` // 用户名称(userid对应的名称)
  142. ACCOUNTNAME string `json:"accountname"` // 账号名称(ACCOUNTID对应的名称)
  143. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  144. CURRENCYNAME string `json:"currencyname"` // 币种名称
  145. FilterStatus string `json:"-"` // 状态过滤条件
  146. }
  147. func (r *QhjRStrategy) calc() {
  148. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  149. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
  150. r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
  151. }
  152. func (r *QhjRStrategy) buildSql() string {
  153. var sqlId utils.SQLVal = "SELECT t.REGULARLYCYCLE," +
  154. " t.REGULARLYCYCLEVALUE," +
  155. " t.REGULARLYMODE," +
  156. " t.REGULARLYMODEVALUE," +
  157. " t.REMARK," +
  158. " t.REGULARLYSTRATEGYSTATUS," +
  159. " t.TRIGGERTOTALTIMES," +
  160. " t.TRIGGERSUCCESSTIMES," +
  161. " t.TRIGGERTOTALQTY," +
  162. " t.TRIGGERTOTALAMOUNT," +
  163. " t.LASTEFFECTTRADEDATE," +
  164. " t.LASTSTOPTRADEDATE," +
  165. " t.LASTTRIGGERTRADEDATE," +
  166. " to_char(t.NEXTTRIGGERDATE, 'yyyy-mm-dd hh24:mi:ss') NEXTTRIGGERDATE," +
  167. " t.NEXTTRIGGERQTY," +
  168. " t.NEXTTRIGGERAMOUNT," +
  169. " t.UPDATORID," +
  170. " t.UPDATESRC," +
  171. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  172. " t.REGULARLYSTRATEGYID," +
  173. " t.USERID," +
  174. " t.ACCOUNTID," +
  175. " t.GOODSID," +
  176. " g.goodscode," +
  177. " g.goodsname," +
  178. " g.goodunitid," +
  179. " ta.accountname" +
  180. " FROM QHJ_REGULARLYSTRATEGY t" +
  181. " LEFT JOIN GOODS g on t.goodsid=g.goodsid" +
  182. " LEFT JOIN TAACCOUNT ta on t.accountid=ta.accountid" +
  183. " WHERE 1 = 1"
  184. sqlId.And("t.USERID", r.USERID)
  185. sqlId.JoinEx(len(r.FilterStatus) > 0, fmt.Sprintf(" and t.REGULARLYSTRATEGYSTATUS in(%v)", r.FilterStatus))
  186. return sqlId.String()
  187. }
  188. // GetDataEx 获取定投规则策略
  189. func (r *QhjRStrategy) GetDataEx() (interface{}, error) {
  190. sData := make([]QhjRStrategy, 0)
  191. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  192. for i := range sData {
  193. sData[i].calc()
  194. }
  195. return sData, err
  196. }
  197. // QhjRSTriggerLog 定投规则策略触发记录
  198. type QhjRSTriggerLog struct {
  199. TRADEID string `json:"tradeid" xorm:"TRADEID"` // 成交单ID
  200. LOGID string `json:"logid" xorm:"LOGID"` // LogID(SEQ_QHJ_RSTRIGGERLOG)
  201. REGULARLYSTRATEGYID int64 `json:"regularlystrategyid" xorm:"REGULARLYSTRATEGYID"` // 定投策略ID
  202. USERID int64 `json:"userid" xorm:"USERID"` // 所属用户ID
  203. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 用户资金账户
  204. GOODSID string `json:"goodsid" xorm:"GOODSID"` // 定投商品ID
  205. REGULARLYCYCLE int32 `json:"regularlycycle" xorm:"REGULARLYCYCLE"` // 定投频率 - 1:每周 2:每月
  206. REGULARLYCYCLEVALUE string `json:"regularlycyclevalue" xorm:"REGULARLYCYCLEVALUE"` // 定投频率值 - 每周几(0-6) 或 每月几号(<=28)
  207. REGULARLYMODE int32 `json:"regularlymode" xorm:"REGULARLYMODE"` // 定投方式 - 1:按数量 2:按金额
  208. REGULARLYMODEVALUE float64 `json:"regularlymodevalue" xorm:"REGULARLYMODEVALUE"` // 定投方式值 - 数量或金额
  209. TRIGGERTIME string `json:"triggertime" xorm:"TRIGGERTIME"` // 触发时间
  210. TRIGGERTRADEDATE string `json:"triggertradedate" xorm:"TRIGGERTRADEDATE"` // 触发交易日
  211. TRIGGERQTY float64 `json:"triggerqty" xorm:"TRIGGERQTY"` // 触发数量
  212. TRIGGERAMOUNT float64 `json:"triggeramount" xorm:"TRIGGERAMOUNT"` // 触发金额
  213. TRIGGERSTATUS int32 `json:"triggerstatus" xorm:"TRIGGERSTATUS"` // 触发状态 - 1:成功 2:失败
  214. RETCODE string `json:"retcode" xorm:"RETCODE"` // 错误码
  215. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 定投商品代码
  216. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 定投商品名称
  217. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 定投商品单位id
  218. CURRENCYID int32 `json:"currencyid" xorm:"'CURRENCYID'"` // 币种id
  219. USERNAME string `json:"username"` // 用户名称(userid对应的名称)
  220. ACCOUNTNAME string `json:"accountname"` // 账号名称(ACCOUNTID对应的名称)
  221. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  222. CURRENCYNAME string `json:"currencyname"` // 币种名称
  223. }
  224. func (r *QhjRSTriggerLog) calc() {
  225. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  226. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
  227. r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
  228. }
  229. func (r *QhjRSTriggerLog) buildSql() string {
  230. var sqlId utils.SQLVal = "SELECT t.TRADEID," +
  231. " t.LOGID," +
  232. " t.REGULARLYSTRATEGYID," +
  233. " t.USERID," +
  234. " t.ACCOUNTID," +
  235. " t.GOODSID," +
  236. " t.REGULARLYCYCLE," +
  237. " t.REGULARLYCYCLEVALUE," +
  238. " t.REGULARLYMODE," +
  239. " t.REGULARLYMODEVALUE," +
  240. " to_char(t.TRIGGERTIME, 'yyyy-mm-dd hh24:mi:ss') TRIGGERTIME," +
  241. " t.TRIGGERTRADEDATE," +
  242. " t.TRIGGERQTY," +
  243. " t.TRIGGERAMOUNT," +
  244. " t.TRIGGERSTATUS," +
  245. " t.RETCODE," +
  246. " g.goodscode," +
  247. " g.goodsname," +
  248. " g.goodunitid," +
  249. " ta.accountname," +
  250. " ta.currencyid" +
  251. " FROM QHJ_RSTRIGGERLOG t" +
  252. " LEFT JOIN GOODS g" +
  253. " on t.goodsid = g.goodsid" +
  254. " LEFT JOIN TAACCOUNT ta" +
  255. " on t.accountid = ta.accountid" +
  256. " WHERE 1 = 1"
  257. sqlId.And("t.USERID", r.USERID)
  258. sqlId.AndEx("t.REGULARLYSTRATEGYID", r.REGULARLYSTRATEGYID, r.REGULARLYSTRATEGYID > 0)
  259. return sqlId.String()
  260. }
  261. // GetDataEx 获取定投规则策略触发记录
  262. func (r *QhjRSTriggerLog) GetDataEx() (interface{}, error) {
  263. sData := make([]QhjRSTriggerLog, 0)
  264. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  265. for i := range sData {
  266. sData[i].calc()
  267. }
  268. return sData, err
  269. }
  270. // UserReceiveInfo 用户收货信息
  271. type UserReceiveInfo struct {
  272. AUTOID int32 `json:"autoid" xorm:"AUTOID"` // AutoID
  273. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  274. RECEIVERNAME string `json:"receivername" xorm:"RECEIVERNAME"` // 提货人姓名
  275. CARDTYPEID int32 `json:"cardtypeid" xorm:"CARDTYPEID"` // 证件类型
  276. CARDNUM string `json:"cardnum" xorm:"CARDNUM"` // 证件号码(加密存储)
  277. PHONENUM string `json:"phonenum" xorm:"PHONENUM"` // 提货人联系方式(加密存储)
  278. ADDRESS string `json:"address" xorm:"ADDRESS"` // 提货人详细地址
  279. TAKEREMARK string `json:"takeremark" xorm:"TAKEREMARK"` // 提货备注
  280. COUNTRYID int32 `json:"countryid" xorm:"COUNTRYID"` // 国家
  281. PROVINCEID int32 `json:"provinceid" xorm:"PROVINCEID"` // 省
  282. CITYID int32 `json:"cityid" xorm:"CITYID"` // 市
  283. DISTRICTID int32 `json:"districtid" xorm:"DISTRICTID"` // 地区
  284. ISDEFAULT int32 `json:"isdefault" xorm:"ISDEFAULT"` // 是否默认地址 - 0:否 1:是
  285. HASENCRYPT int32 `json:"hasencrypt" xorm:"HASENCRYPT"` // 数据是否已加密 - 0:未加密 1:已加密
  286. }
  287. func (r *UserReceiveInfo) calc() {
  288. // 加密过的长度 > 16, 否则是未加密的
  289. if len(r.CARDNUM) > 16 {
  290. r.CARDNUM = DecryptField(r.CARDNUM)
  291. }
  292. if len(r.PHONENUM) > 16 {
  293. r.PHONENUM = DecryptField(r.PHONENUM)
  294. }
  295. }
  296. func (r *UserReceiveInfo) buildSql() string {
  297. var sqlId utils.SQLVal = "SELECT t.AUTOID," +
  298. " t.USERID," +
  299. " t.RECEIVERNAME," +
  300. " t.CARDTYPEID," +
  301. " t.CARDNUM," +
  302. " t.PHONENUM," +
  303. " t.ADDRESS," +
  304. " t.TAKEREMARK," +
  305. " t.COUNTRYID," +
  306. " t.PROVINCEID," +
  307. " t.CITYID," +
  308. " t.DISTRICTID," +
  309. " t.ISDEFAULT," +
  310. " t.HASENCRYPT" +
  311. " FROM USERRECEIVEINFO t" +
  312. " WHERE 1 = 1"
  313. sqlId.And("t.USERID", r.USERID)
  314. return sqlId.String()
  315. }
  316. // GetDataEx 获取用户收货信息
  317. func (r *UserReceiveInfo) GetDataEx() (interface{}, error) {
  318. sData := make([]UserReceiveInfo, 0)
  319. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  320. for i := range sData {
  321. sData[i].calc()
  322. }
  323. return sData, err
  324. }
  325. // UserCollectConfig 提现账户设置
  326. type UserCollectConfig struct {
  327. COLLECTCONFIGID string `json:"collectconfigid" xorm:"COLLECTCONFIGID"` // 收款账户配置ID(SEQ_USERCOLLECTCONFIG)
  328. USERID int64 `json:"userid" xorm:"USERID"` // 收款人用户ID
  329. COLLECTACCOUNTNO string `json:"collectaccountno" xorm:"COLLECTACCOUNTNO"` // 收款人账户
  330. COLLECTACCOUNTNAME string `json:"collectaccountname" xorm:"COLLECTACCOUNTNAME"` // 收款人账户名称
  331. COLLECTBANKNAME string `json:"collectbankname" xorm:"COLLECTBANKNAME"` // 收款人开户行
  332. COLLECTBRANCHBANKNAME string `json:"collectbranchbankname" xorm:"COLLECTBRANCHBANKNAME"` // 收款人开户支行
  333. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  334. ACCOUNTSTATUS int32 `json:"accountstatus" xorm:"ACCOUNTSTATUS"` // 账户状态 - 1:正常 2:停用 3:注销
  335. }
  336. func (r *UserCollectConfig) calc() {
  337. // 加密后的长度是32的倍数
  338. if len(r.COLLECTACCOUNTNO)%32 == 0 {
  339. r.COLLECTACCOUNTNO = DecryptField(r.COLLECTACCOUNTNO)
  340. }
  341. }
  342. func (r *UserCollectConfig) buildSql() string {
  343. var sqlId utils.SQLVal = "SELECT t.COLLECTCONFIGID," +
  344. " t.USERID," +
  345. " t.COLLECTACCOUNTNO," +
  346. " t.COLLECTACCOUNTNAME," +
  347. " t.COLLECTBANKNAME," +
  348. " t.COLLECTBRANCHBANKNAME," +
  349. " t.REMARK," +
  350. " t.ACCOUNTSTATUS" +
  351. " FROM USERCOLLECTCONFIG t" +
  352. " WHERE 1 = 1"
  353. sqlId.And("t.USERID", r.USERID)
  354. return sqlId.String()
  355. }
  356. // GetDataEx 获取提现账户设置
  357. func (r *UserCollectConfig) GetDataEx() (interface{}, error) {
  358. sData := make([]UserCollectConfig, 0)
  359. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  360. for i := range sData {
  361. sData[i].calc()
  362. }
  363. return sData, err
  364. }
  365. // QhjTradeGoodsPickup 提货单
  366. type QhjTradeGoodsPickup struct {
  367. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 更新来源 - 1:管理端 2:终端
  368. STOREUSERID int64 `json:"storeuserid" xorm:"STOREUSERID"` // 门店用户ID (千海金)
  369. ARTRADEDATE string `json:"artradedate" xorm:"ARTRADEDATE"` // 自动收货交易日(yyyyMMdd)
  370. EXPRESSCOMPANY string `json:"expresscompany" xorm:"EXPRESSCOMPANY"` // 物流公司
  371. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  372. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  373. EXPRESSNUM string `json:"expressnum" xorm:"EXPRESSNUM"` // 物流单号
  374. TAKEORDERID int64 `json:"takeorderid" xorm:"TAKEORDERID"` // 提货单号(905+Unix秒时间戳(10位)+xxxxxx)
  375. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账户ID
  376. GOODSID int64 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  377. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  378. QTY float64 `json:"qty" xorm:"QTY"` // 交易商品总手数(交易商品 - 69模式按成交量放大) - 明细表的交易商品手数汇总
  379. REQTIME string `json:"reqtime" xorm:"REQTIME"` // 提货申请时间
  380. RECIVERNAME string `json:"recivername" xorm:"RECIVERNAME"` // 提货人姓名
  381. CARDTYPEID int32 `json:"cardtypeid" xorm:"CARDTYPEID"` // 提货人证件类型
  382. CARDNUM string `json:"cardnum" xorm:"CARDNUM"` // 提货人证件号码
  383. PHONENUM string `json:"phonenum" xorm:"PHONENUM"` // 提货人联系方式
  384. TAKEMODE int32 `json:"takemode" xorm:"TAKEMODE"` // 提货方式 - 2:自提 3:配送(邮寄)
  385. ADDRESS string `json:"address" xorm:"ADDRESS"` // 提货人详细地址
  386. TAKEREMARK string `json:"takeremark" xorm:"TAKEREMARK"` // 提货备注
  387. TAKEORDERSTATUS int32 `json:"takeorderstatus" xorm:"TAKEORDERSTATUS"` // 提货状态 - 1:备货中 2:待取货(自提) 3:已取货(自提) 4:待收货(邮寄) 5:已收货(邮寄) 6:自动收货(邮寄) 7:已拒绝 8:已撤销
  388. AUDITER int32 `json:"auditer" xorm:"AUDITER"` // 审核人
  389. AUDITTIME string `json:"audittime" xorm:"AUDITTIME"` // 审核时间(发货时间)
  390. CHECKREMARK string `json:"checkremark" xorm:"CHECKREMARK"` // 审核备注
  391. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  392. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  393. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态
  394. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 提货金额
  395. COUNTRYID int32 `json:"countryid" xorm:"COUNTRYID"` // 国家
  396. PROVINCEID int32 `json:"provinceid" xorm:"PROVINCEID"` // 省
  397. CITYID int32 `json:"cityid" xorm:"CITYID"` // 市
  398. DISTRICTID int32 `json:"districtid" xorm:"DISTRICTID"` // 地区
  399. PICKUPGOODSID string `json:"pickupgoodsid" xorm:"PICKUPGOODSID"` // 提货商品ID
  400. GOODSAGREEUNIT float64 `json:"goodsagreeunit" xorm:"GOODSAGREEUNIT"` // 交易商品乘数
  401. PICKUPGOODSAGREEUNIT float64 `json:"pickupgoodsagreeunit" xorm:"PICKUPGOODSAGREEUNIT"` // 提货商品合约乘数
  402. PICKUPRATIO float64 `json:"pickupratio" xorm:"PICKUPRATIO"` // 提货系数
  403. PICKUPGOODSQTY float64 `json:"pickupgoodsqty" xorm:"PICKUPGOODSQTY"` // 提货商品手数(数量)
  404. GOODSQTY float64 `json:"goodsqty" xorm:"GOODSQTY"` // 交易商品手数(69模式按成交量小数位放大取整)
  405. PREPAREDAYS int32 `json:"preparedays" xorm:"PREPAREDAYS"` // 备货期(天)-提货单明细表
  406. PICKUPGOODSNAME string `json:"pickupgoodsname" xorm:"PICKUPGOODSNAME"` // 提货商品名称
  407. PICKUPGOODSUNITID int32 `json:"pickupgoodsunitid" xorm:"PICKUPGOODSUNITID"` // 单位ID(提货商品)
  408. ENUMDICNAME string `json:"enumdicname"` // 单位名称(提货商品)
  409. USERNAME string `json:"username"` // 用户名称
  410. STOREUSERNAME string `json:"storeusername"` // 门店用户名称
  411. }
  412. func (r *QhjTradeGoodsPickup) calc() {
  413. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.PICKUPGOODSUNITID)
  414. r.STOREUSERNAME = mtpcache.GetUserNameByUserId(r.STOREUSERID)
  415. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  416. }
  417. func (r *QhjTradeGoodsPickup) buildSql() string {
  418. var sqlId utils.SQLVal = "SELECT t.AUDITSRC," +
  419. " t.STOREUSERID," +
  420. " t.ARTRADEDATE," +
  421. " t.EXPRESSCOMPANY," +
  422. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  423. " t.AUDITTRADEDATE," +
  424. " t.EXPRESSNUM," +
  425. " t.TAKEORDERID," +
  426. " t.ACCOUNTID," +
  427. " t.GOODSID," +
  428. " t.USERID," +
  429. " t.QTY," +
  430. " to_char(t.REQTIME, 'yyyy-mm-dd hh24:mi:ss') REQTIME," +
  431. " t.RECIVERNAME," +
  432. " t.CARDTYPEID," +
  433. " t.CARDNUM," +
  434. " t.PHONENUM," +
  435. " t.TAKEMODE," +
  436. " t.ADDRESS," +
  437. " t.TAKEREMARK," +
  438. " t.TAKEORDERSTATUS," +
  439. " t.AUDITER," +
  440. " to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME," +
  441. " t.CHECKREMARK," +
  442. " t.TRADEDATE," +
  443. " t.MARKETID," +
  444. " t.HANDLESTATUS," +
  445. " t.AMOUNT," +
  446. " t.COUNTRYID," +
  447. " t.PROVINCEID," +
  448. " t.CITYID," +
  449. " t.DISTRICTID," +
  450. " k.PICKUPGOODSID," +
  451. " k.GOODSAGREEUNIT," +
  452. " k.PICKUPGOODSAGREEUNIT," +
  453. " k.PICKUPRATIO," +
  454. " k.PICKUPGOODSQTY," +
  455. " k.GOODSQTY," +
  456. " k.PREPAREDAYS," +
  457. " g.PICKUPGOODSNAME," +
  458. " g.PICKUPGOODSUNITID" +
  459. " FROM TRADE_GOODSPICKUP t" +
  460. " LEFT JOIN TRADE_GOODSPICKUPDETAIL k on t.takeorderid = k.takeorderid" +
  461. " LEFT JOIN PICKUPGOODS g on k.pickupgoodsid=g.pickupgoodsid" +
  462. " WHERE 1 = 1"
  463. sqlId.And("t.USERID", r.USERID)
  464. return sqlId.String()
  465. }
  466. // GetDataEx 获取提货单
  467. func (r *QhjTradeGoodsPickup) GetDataEx() (interface{}, error) {
  468. sData := make([]QhjTradeGoodsPickup, 0)
  469. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  470. for i := range sData {
  471. sData[i].calc()
  472. }
  473. return sData, err
  474. }
  475. // QhjPickGoods 提货商品
  476. type QhjPickGoods struct {
  477. PICKUPGOODSID string `json:"pickupgoodsid" xorm:"PICKUPGOODSID"` // 提货商品ID
  478. PICKUPGOODSNAME string `json:"pickupgoodsname" xorm:"PICKUPGOODSNAME"` // 提货商品名称
  479. PICKUPGOODSUNITID int32 `json:"pickupgoodsunitid" xorm:"PICKUPGOODSUNITID"` // 单位ID
  480. PICKUPGOODSAGREEUNIT float64 `json:"pickupgoodsagreeunit" xorm:"PICKUPGOODSAGREEUNIT"` // 合约乘数
  481. PICKUPGOODSDESC string `json:"pickupgoodsdesc" xorm:"PICKUPGOODSDESC"` // 描述
  482. IMAGEADDRESS string `json:"imageaddress" xorm:"IMAGEADDRESS"` // 图片
  483. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  484. MODIFYSRC int32 `json:"modifysrc" xorm:"MODIFYSRC"` // 修改来源 - 1:管理端 2:终端
  485. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID"` // 修改人
  486. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  487. PREPAREDAYS int32 `json:"preparedays" xorm:"PREPAREDAYS"` // 备货期(天)
  488. PICKUPGOODSSTATUS int32 `json:"pickupgoodsstatus" xorm:"PICKUPGOODSSTATUS"` // 状态 - 1:正常 2:停用 3:注销
  489. MODIFIERNAME string `json:"modifiername"` // 修改人名称
  490. FilterStatus string `json:"-"` // 状态过淲
  491. }
  492. func (r *QhjPickGoods) calc() {
  493. if r.MODIFYSRC == 1 {
  494. r.MODIFIERNAME = mtpcache.GetSystemmangerLoginCode(r.MODIFIERID)
  495. } else {
  496. r.MODIFIERNAME = mtpcache.GetLoginCodeByLoginId(r.MODIFIERID)
  497. }
  498. if r.MODIFIERNAME == "" {
  499. r.MODIFIERNAME = mtpcache.GetUserNameByUserId(r.MODIFIERID)
  500. }
  501. }
  502. func (r *QhjPickGoods) buildSql() string {
  503. var sqlId utils.SQLVal = "SELECT t.PICKUPGOODSID," +
  504. " t.PICKUPGOODSNAME," +
  505. " t.PICKUPGOODSUNITID," +
  506. " t.PICKUPGOODSAGREEUNIT," +
  507. " to_char(t.PICKUPGOODSDESC) PICKUPGOODSDESC," +
  508. " to_char(t.IMAGEADDRESS) IMAGEADDRESS," +
  509. " t.REMARK," +
  510. " t.MODIFYSRC," +
  511. " t.MODIFIERID," +
  512. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  513. " t.PREPAREDAYS," +
  514. " t.PICKUPGOODSSTATUS" +
  515. " FROM PICKUPGOODS t" +
  516. " WHERE 1 = 1"
  517. if len(r.FilterStatus) > 0 {
  518. sqlId.Join(fmt.Sprintf(" and t.PICKUPGOODSSTATUS in(%v)", r.FilterStatus))
  519. }
  520. return sqlId.String()
  521. }
  522. // GetDataEx 获取提货商品
  523. func (r *QhjPickGoods) GetDataEx() (interface{}, error) {
  524. sData := make([]QhjPickGoods, 0)
  525. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  526. for i := range sData {
  527. sData[i].calc()
  528. }
  529. return sData, err
  530. }