ferroalloy.go 60 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506
  1. package models
  2. import (
  3. "errors"
  4. "fmt"
  5. "mtp2_if/db"
  6. "mtp2_if/logger"
  7. "mtp2_if/mtpcache"
  8. "mtp2_if/utils"
  9. "strconv"
  10. "strings"
  11. "sync"
  12. "time"
  13. )
  14. // 上海铁合金项目
  15. // GErmcpspotgoodsprice 现货市价表
  16. type GErmcpspotgoodsprice struct {
  17. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  18. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(通用则为0)
  19. SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID(通用则为0, 不为0则须先有商品ID)
  20. CURRENCYID int64 `json:"currencyid" xorm:"CURRENCYID"` // 报价货币ID
  21. SPOTGOODSPRICE float64 `json:"spotgoodsprice" xorm:"SPOTGOODSPRICE"` // 【最新价】当前价格
  22. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 【日期】交易日
  23. OPERATESRC int32 `json:"-" xorm:"OPERATESRC"` // 最后操作来源 - 1:管理端 2:终端
  24. OPERATEID int64 `json:"-" xorm:"OPERATEID"` // 最后操作人
  25. OPERATETIME time.Time `json:"-" xorm:"OPERATETIME"` // 最后操作时间
  26. ISVALID int32 `json:"-" xorm:"ISVALID"` // 是否有效 - 0:无效 1:有效
  27. YSTSPOTGOODSPRICE float64 `json:"ystspotgoodsprice" xorm:"YSTSPOTGOODSPRICE"` // 昨价
  28. TODAYSPOTGOODSPRICE float64 `json:"todayspotgoodsprice" xorm:"TODAYSPOTGOODSPRICE"` // 今日指定价
  29. TODAYPRICEDTOTALQTY float64 `json:"todaypricedtotalqty" xorm:"TODAYPRICEDTOTALQTY"` // 今日定价总量
  30. TODAYPRICEDTOTALAMOUNT float64 `json:"todaypricedtotalamount" xorm:"TODAYPRICEDTOTALAMOUNT"` // 今日定价金额
  31. SRCMARKETNAME string `json:"srcmarketname" xorm:"SRCMARKETNAME"` // 来源市场名称
  32. PRESPOTGOODSPRICE float64 `json:"prespotgoodsprice" xorm:"PRESPOTGOODSPRICE"` // 上日价格
  33. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  34. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 【名称】现货商品名称
  35. CHG string `json:"chg" xorm:"CHG"` // 涨跌幅
  36. PageEx `xorm:"extends"` // 页码信息
  37. }
  38. func (r *GErmcpspotgoodsprice) calc() {
  39. if len(r.TRADEDATE) == 8 {
  40. r.TRADEDATE = fmt.Sprintf("%v-%v-%v", r.TRADEDATE[0:4], r.TRADEDATE[4:6], r.TRADEDATE[6:8])
  41. }
  42. }
  43. func (r *GErmcpspotgoodsprice) buildSql() string {
  44. var sqlId utils.SQLVal = `
  45. SELECT
  46. t.DELIVERYGOODSID ,
  47. t.WRSTANDARDID ,
  48. t.SPOTGOODSBRANDID ,
  49. t.CURRENCYID ,
  50. t.SPOTGOODSPRICE ,
  51. t.TRADEDATE ,
  52. t.YSTSPOTGOODSPRICE ,
  53. t.TODAYSPOTGOODSPRICE ,
  54. t.TODAYPRICEDTOTALQTY ,
  55. t.TODAYPRICEDTOTALAMOUNT,
  56. t.SRCMARKETNAME,
  57. t.PRESPOTGOODSPRICE,
  58. to_char(ROUND(((t.SPOTGOODSPRICE - t.PRESPOTGOODSPRICE) / t.PRESPOTGOODSPRICE) * 100, 2)) || '%' CHG,
  59. w.WRSTANDARDCODE,
  60. w.WRSTANDARDNAME
  61. FROM ERMCP_SPOTGOODSPRICE t
  62. LEFT JOIN WRStandard w ON t.WRSTANDARDID = w.WRSTANDARDID
  63. WHERE t.SPOTGOODSBRANDID = 0 AND t.CURRENCYID = 1 AND t.ISVALID = 1
  64. `
  65. sqlId.OrderByDesc("w.WRSTANDARDNAME")
  66. sqlId.Page(r.Page, r.PageSize)
  67. return sqlId.String()
  68. }
  69. func (r *GErmcpspotgoodsprice) GetDataByPage() (interface{}, error, int, int, int) {
  70. sData := make([]GErmcpspotgoodsprice, 0)
  71. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  72. total := 0
  73. for i := range sData {
  74. sData[i].calc()
  75. total = sData[i].Total
  76. }
  77. return sData, err, r.Page, r.PageSize, total
  78. }
  79. type THJSigninReq struct {
  80. USERID int64 `form:"userid" binding:"required"` // 用户ID
  81. }
  82. type THJSigninRsp struct {
  83. SigninStatus int `json:"signinstatus"` // 状态操作标志 1-签到成功 2-当日已签到,不能重复签到
  84. }
  85. // Signin 用户签到
  86. func (r *THJSigninReq) Signin() (rsp *THJSigninRsp, err error) {
  87. // 资源锁
  88. var lock sync.Mutex
  89. lock.Lock()
  90. defer lock.Unlock()
  91. engine := db.GetEngine()
  92. // 获取目标用户信息
  93. if u, err := GetUserInfo(int(r.USERID)); err != nil || u == nil {
  94. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  95. err = errors.New("错误的用户ID")
  96. return nil, err
  97. }
  98. // 判断目标用户当日是否已经签到
  99. p := new(Thjsignin)
  100. if has, err := engine.Where("userid = ?", r.USERID).And("tradedate = to_char(sysdate, 'yyyymmdd')").Get(p); err != nil {
  101. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  102. err = errors.New("数据错误")
  103. return nil, err
  104. } else {
  105. if has {
  106. return &THJSigninRsp{SigninStatus: 2}, nil
  107. }
  108. }
  109. // 获取签到积配置
  110. c := Thjscoreconfig{
  111. SCORECONFIGTYPE: 2,
  112. }
  113. if has, err := engine.Get(&c); err != nil || !has {
  114. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  115. err = errors.New("数据错误")
  116. return nil, err
  117. }
  118. // 事务
  119. session := engine.NewSession()
  120. defer session.Close()
  121. // add Begin() before any action
  122. if err := session.Begin(); err != nil {
  123. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  124. return nil, errors.New("数据错误")
  125. }
  126. now := time.Now()
  127. // 签到积分配置大于0才记积分和流水
  128. if c.PARMA1 > 0 {
  129. // 判断用户积分表是否已经存在此用户
  130. curscore := 0
  131. t := Thjuserscore{USERID: r.USERID}
  132. has, err := session.Get(&t)
  133. if err != nil {
  134. session.Rollback()
  135. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  136. return nil, errors.New("数据错误")
  137. }
  138. if has {
  139. // 更新积分
  140. curscore = int(t.CURSCORE)
  141. t.CURSCORE += int64(c.PARMA1)
  142. t.UPDATETIME = now
  143. // _, err = session.Update(&t)
  144. sql := fmt.Sprintf(`UPDATE THJ_USERSCORE
  145. SET CURSCORE = %v, UPDATETIME = to_date('%v', 'yyyy-mm-dd hh24:mi:ss')
  146. WHERE USERID = %v`,
  147. t.CURSCORE, t.UPDATETIME.Format("2006-01-02 15:04:05"), t.USERID)
  148. _, err = session.Exec(sql)
  149. if err != nil {
  150. session.Rollback()
  151. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  152. return nil, errors.New("数据错误")
  153. }
  154. } else {
  155. // 新增用户积分记录
  156. t.CURSCORE = int64(c.PARMA1)
  157. t.UPDATETIME = now
  158. // _, err = session.Insert(&t)
  159. sql := fmt.Sprintf(`INSERT INTO THJ_USERSCORE VALUES (%v, %v, %v, to_date('%v', 'yyyy-mm-dd hh24:mi:ss'))`,
  160. t.USERID, t.CURSCORE, 0, t.UPDATETIME.Format("2006-01-02 15:04:05"))
  161. _, err = session.Exec(sql)
  162. if err != nil {
  163. session.Rollback()
  164. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  165. return nil, errors.New("数据错误")
  166. }
  167. }
  168. // 记录积分流水
  169. q := Thjuserscorelog{}
  170. seqMap, err := session.QueryString("SELECT SEQ_THJ_USERSCORELOG.nextval SEQID FROM dual")
  171. if err != nil {
  172. session.Rollback()
  173. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  174. return nil, errors.New("数据错误")
  175. }
  176. if len(seqMap) <= 0 {
  177. session.Rollback()
  178. return nil, errors.New("获取自增ID错误")
  179. }
  180. seqID, _ := strconv.Atoi(seqMap[0]["SEQID"])
  181. q.AUTOID = int64(seqID)
  182. q.USERID = r.USERID
  183. q.SCORECONFIGTYPE = 2 // 2:签到送积分
  184. q.SCORE = float64(c.PARMA1)
  185. q.ORISCORE = float64(curscore)
  186. q.CURSCORE = float64(t.CURSCORE)
  187. q.CREATETIME = now
  188. q.RELATEDORDERID = r.USERID
  189. // _, err = session.Insert(&q)
  190. sql := fmt.Sprintf(`INSERT INTO THJ_USERSCORELOG
  191. (AUTOID, USERID, SCORECONFIGTYPE, SCORE, ORISCORE, CURSCORE, CREATETIME)
  192. VALUES
  193. (%v, %v, %v, %v, %v, %v, to_date('%v', 'yyyy-mm-dd hh24:mi:ss'))`,
  194. q.AUTOID, q.USERID, q.SCORECONFIGTYPE, q.SCORE, q.ORISCORE, q.CURSCORE, q.CREATETIME.Format("2006-01-02 15:04:05"))
  195. _, err = session.Exec(sql)
  196. if err != nil {
  197. session.Rollback()
  198. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  199. return nil, errors.New("数据错误")
  200. }
  201. }
  202. // 增加签到记录
  203. sql := fmt.Sprintf(`INSERT INTO THJ_SIGNIN VALUES (%v, %v, to_date('%v', 'yyyy-mm-dd hh24:mi:ss'))`,
  204. r.USERID, now.Format("20060102"), now.Format("2006-01-02 15:04:05"))
  205. _, err = session.Exec(sql)
  206. if err != nil {
  207. session.Rollback()
  208. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  209. return nil, errors.New("数据错误")
  210. }
  211. // add Commit() after all actions
  212. err = session.Commit()
  213. if err != nil {
  214. session.Rollback()
  215. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  216. return nil, errors.New("数据错误")
  217. }
  218. return &THJSigninRsp{SigninStatus: 1}, nil
  219. }
  220. // 我的推荐列表
  221. type MyRefer struct {
  222. Accountname string `json:"accountname" xorm:"ACCOUNTNAME"` // 用户名(脱敏)
  223. Score float64 `json:"score" xorm:"SCORE"` // 积分
  224. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 时间(yyyy-mm-dd)
  225. UserID int `json:"-" form:"userid" binding:"required"` // 用户ID
  226. PageEx `xorm:"extends"` // 页码信息
  227. }
  228. func (r *MyRefer) calc() {
  229. r.Accountname = EncryptByStar(r.Accountname)
  230. }
  231. func (r *MyRefer) buildSql() string {
  232. var sqlId utils.SQLVal = `
  233. select
  234. u.ACCOUNTNAME,
  235. t.SCORE,
  236. to_char(t.CREATETIME, 'yyyy-mm-dd') CREATETIME
  237. from THJ_USERSCORELOG t
  238. inner join USERACCOUNT u on u.USERID = t.RELATEDORDERID
  239. where t.USERID = %v
  240. order by t.CREATETIME desc
  241. `
  242. sqlId.FormatParam(r.UserID)
  243. sqlId.Page(r.Page, r.PageSize)
  244. return sqlId.String()
  245. }
  246. func (r *MyRefer) GetDataByPage() (interface{}, error, int, int, int) {
  247. sData := make([]MyRefer, 0)
  248. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  249. total := 0
  250. for i := range sData {
  251. sData[i].calc()
  252. total = sData[i].Total
  253. }
  254. return sData, err, r.Page, r.PageSize, total
  255. }
  256. type GThjuserscorelog struct {
  257. USERID int64 `json:"-" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  258. SCORECONFIGTYPE int32 `json:"scoreconfigtype" xorm:"SCORECONFIGTYPE"` // 配置类型 - 1:注册红包 2:签到积分 3:推广积分 4:下级用户下单积分 5:自己采购下单积分 6:自己供求下单积分 7:抽奖配置
  259. SCORE float64 `json:"score" xorm:"SCORE"` // 变动积分
  260. ORISCORE float64 `json:"-" xorm:"ORISCORE"` // 期初积分(变动前积)
  261. CURSCORE float64 `json:"-" xorm:"CURSCORE"` // 期末积分(变动后积)
  262. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 记账时间
  263. REMARK string `json:"-" xorm:"REMARK"` // 备注
  264. RELATEDORDERID int64 `json:"-" xorm:"RELATEDORDERID"` // 关联单号\推荐人UserID
  265. REDPACKETVALUE float64 `json:"redpacketvalue" xorm:"REDPACKETVALUE"` // 红包值【抽奖】
  266. STYPE string `form:"stype"` // [格式:1,2,3] 配置类型 - 1:注册红包 2:签到积分 3:推广积分 4:下级用户下单积分 5:自己采购下单积分 6:自己供求下单积分 7:抽奖配置
  267. PageEx `xorm:"extends"` // 页码信息
  268. }
  269. func (r *GThjuserscorelog) calc() {
  270. }
  271. func (r *GThjuserscorelog) buildSql() string {
  272. var sqlId utils.SQLVal = `
  273. select
  274. t.SCORECONFIGTYPE,
  275. t.SCORE,
  276. t.REDPACKETVALUE,
  277. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME
  278. from THJ_USERSCORELOG t
  279. where t.USERID = %v and %v
  280. order by t.CREATETIME desc
  281. `
  282. param := "1=1"
  283. if r.STYPE != "" {
  284. param = fmt.Sprintf("t.SCORECONFIGTYPE in (%v)", r.STYPE)
  285. }
  286. sqlId.FormatParam(r.USERID, param)
  287. sqlId.Page(r.Page, r.PageSize)
  288. return sqlId.String()
  289. }
  290. func (r *GThjuserscorelog) GetDataByPage() (interface{}, error, int, int, int) {
  291. sData := make([]GThjuserscorelog, 0)
  292. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  293. total := 0
  294. for i := range sData {
  295. sData[i].calc()
  296. total = sData[i].Total
  297. }
  298. return sData, err, r.Page, r.PageSize, total
  299. }
  300. // THJWrstandard 现货商品表
  301. type THJWrstandard struct {
  302. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  303. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  304. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME" form:"wrstandardname"` // 现货商品名称(模糊查询)
  305. DELIVERYGOODSID int32 `json:"-" xorm:"DELIVERYGOODSID"` // 现货品种ID
  306. UNITID int32 `json:"-" xorm:"UNITID"` // 现货商品单位ID
  307. MINIVALUE int64 `json:"-" xorm:"MINIVALUE"` // 最小变动值
  308. MINIVALUEDP int64 `json:"-" xorm:"MINIVALUEDP"` // 最小变动值小数位
  309. REALMINIVALUE int64 `json:"-" xorm:"REALMINIVALUE"` // 实际最小变动值
  310. REALMINIVALUEDP int64 `json:"-" xorm:"REALMINIVALUEDP"` // 实际最小变动值小数位
  311. WRSSTATUS int32 `json:"-" xorm:"WRSSTATUS"` // 状态 - 作废 - 0:未激活 1:正常
  312. CREATORID int64 `json:"-" xorm:"CREATORID"` // 创建人
  313. CREATETIME time.Time `json:"-" xorm:"CREATETIME"` // 创建时间
  314. UPDATORID int64 `json:"-" xorm:"UPDATORID"` // 更新人
  315. UPDATETIME time.Time `json:"-" xorm:"UPDATETIME"` // 更新时间
  316. FACTORYITEMJSON string `json:"-" xorm:"FACTORYITEMJSON"` // 要素项定义Json[{"DGFactoryItemTypeID": ,"ItemTypeMode": ,"FactoryItemIDs": },{.....},]DGFactoryItemTypeID - 要素项类型ID --DGFactoryItem->DGFactoryItemTypeIDItemTypeMode - 要素项类型模式 --DGFactoryItem->ItemTypeModeFactoryItemIDs - 选择项IDs--DGFactoryItem->DGFactoryItemID, 逗号分隔
  317. ISVALID int32 `json:"-" xorm:"ISVALID"` // 是否有效 - 0:无效 1:有效
  318. AREAUSERID int64 `json:"-" xorm:"AREAUSERID"` // 所属机构
  319. REMARK string `json:"-" xorm:"REMARK"` // 备注
  320. CONVERTFACTOR float64 `json:"-" xorm:"CONVERTFACTOR"` // 标仓系数
  321. VATRATE float64 `json:"-" xorm:"VATRATE"` // 现货增值税率
  322. STORAGEFEE float64 `json:"-" xorm:"STORAGEFEE"` // 仓储费(固定: 111)
  323. THUMURLS string `json:"thumurls" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
  324. PICTUREURLS string `json:"-" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  325. BANNERPICURL string `json:"-" xorm:"BANNERPICURL"` // Banner图(逗号分隔)
  326. PROVIDERUSERID int64 `json:"-" xorm:"PROVIDERUSERID"` // 供应链提供商
  327. PROVIDERACCOUNTID int64 `json:"-" xorm:"PROVIDERACCOUNTID"` // 供应链提供商资金账户 ID
  328. PageEx `xorm:"extends"` // 页码信息
  329. }
  330. func (r *THJWrstandard) calc() {
  331. }
  332. func (r *THJWrstandard) buildSql() string {
  333. var sqlId utils.SQLVal = `
  334. select
  335. wr.*
  336. from wrstandard wr
  337. where wr.wrstandardid in
  338. (select distinct t.wrstandardid
  339. from WR_PresaleInfo t
  340. where t.presalestatus = 2
  341. and t.marketid = 64201) and %v
  342. order by wr.wrstandardname
  343. `
  344. param := "1=1"
  345. if r.WRSTANDARDNAME != "" {
  346. param = fmt.Sprintf("wr.wrstandardname like '%%%v%%'", r.WRSTANDARDNAME)
  347. }
  348. sqlId.FormatParam(param)
  349. sqlId.Page(r.Page, r.PageSize)
  350. return sqlId.String()
  351. }
  352. func (r *THJWrstandard) GetDataByPage() (interface{}, error, int, int, int) {
  353. sData := make([]THJWrstandard, 0)
  354. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  355. total := 0
  356. for i := range sData {
  357. sData[i].calc()
  358. total = sData[i].Total
  359. }
  360. return sData, err, r.Page, r.PageSize, total
  361. }
  362. // RegisterMoney 注册红包
  363. type RegisterMoney struct {
  364. Amount float64 `json:"amount" xorm:"AMOUNT"` // 红包
  365. Accountid int64 `json:"-" form:"accountid" binding:"required"` // 资金账户ID
  366. }
  367. func (r *RegisterMoney) calc() {
  368. }
  369. func (r *RegisterMoney) buildSql() string {
  370. var sqlId utils.SQLVal = `
  371. select
  372. t.amount
  373. from taaccountlog t
  374. where t.accountid = %v and t.businesscode = '712'
  375. `
  376. sqlId.FormatParam(r.Accountid)
  377. return sqlId.String()
  378. }
  379. // GetDataEx 从数据库中查询数据
  380. func (r *RegisterMoney) GetDataEx() (interface{}, error) {
  381. e := db.GetEngine()
  382. s := e.SQL(r.buildSql())
  383. sData := make([]RegisterMoney, 0)
  384. if err := s.Find(&sData); err != nil {
  385. return nil, err
  386. }
  387. for i := range sData {
  388. sData[i].calc()
  389. }
  390. return sData, nil
  391. }
  392. // THJWrstandardDetail_GoodsInfo 采购商品信息
  393. type THJWrstandardDetail_GoodsInfo struct {
  394. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  395. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  396. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  397. DELIVERYGOODSID int32 `json:"-" xorm:"DELIVERYGOODSID"` // 现货品种ID
  398. UNITID int32 `json:"unitid" xorm:"UNITID"` // 现货商品单位ID
  399. MINIVALUE int64 `json:"-" xorm:"MINIVALUE"` // 最小变动值
  400. MINIVALUEDP int64 `json:"-" xorm:"MINIVALUEDP"` // 最小变动值小数位
  401. REALMINIVALUE int64 `json:"-" xorm:"REALMINIVALUE"` // 实际最小变动值
  402. REALMINIVALUEDP int64 `json:"-" xorm:"REALMINIVALUEDP"` // 实际最小变动值小数位
  403. WRSSTATUS int32 `json:"-" xorm:"WRSSTATUS"` // 状态 - 作废 - 0:未激活 1:正常
  404. CREATORID int64 `json:"-" xorm:"CREATORID"` // 创建人
  405. CREATETIME time.Time `json:"-" xorm:"CREATETIME"` // 创建时间
  406. UPDATORID int64 `json:"-" xorm:"UPDATORID"` // 更新人
  407. UPDATETIME time.Time `json:"-" xorm:"UPDATETIME"` // 更新时间
  408. FACTORYITEMJSON string `json:"-" xorm:"FACTORYITEMJSON"` // 要素项定义Json[{"DGFactoryItemTypeID": ,"ItemTypeMode": ,"FactoryItemIDs": },{.....},]DGFactoryItemTypeID - 要素项类型ID --DGFactoryItem->DGFactoryItemTypeIDItemTypeMode - 要素项类型模式 --DGFactoryItem->ItemTypeModeFactoryItemIDs - 选择项IDs--DGFactoryItem->DGFactoryItemID, 逗号分隔
  409. ISVALID int32 `json:"-" xorm:"ISVALID"` // 是否有效 - 0:无效 1:有效
  410. AREAUSERID int64 `json:"-" xorm:"AREAUSERID"` // 所属机构
  411. REMARK string `json:"-" xorm:"REMARK"` // 备注
  412. CONVERTFACTOR float64 `json:"-" xorm:"CONVERTFACTOR"` // 标仓系数
  413. VATRATE float64 `json:"-" xorm:"VATRATE"` // 现货增值税率
  414. STORAGEFEE float64 `json:"-" xorm:"STORAGEFEE"` // 仓储费(固定: 111)
  415. THUMURLS string `json:"-" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
  416. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  417. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图(逗号分隔)
  418. PROVIDERUSERID int64 `json:"-" xorm:"PROVIDERUSERID"` // 供应链提供商
  419. PROVIDERACCOUNTID int64 `json:"-" xorm:"PROVIDERACCOUNTID"` // 供应链提供商资金账户 ID
  420. SPOTGOODSPRICE float64 `json:"spotgoodsprice" xorm:"SPOTGOODSPRICE"` // 现货价格
  421. }
  422. // THJDeliveryMode 交割方式
  423. type THJDeliveryMode struct {
  424. ENUMDICNAME string `json:"enumdicname" xorm:"ENUMDICNAME"` // 枚举项名称
  425. ENUMITEMNAME int64 `json:"enumitemname" xorm:"ENUMITEMNAME"` // 枚举项值
  426. }
  427. // THJDeliveryMonth 交割月份
  428. type THJDeliveryMonth struct {
  429. PRESALEAPPLYID string `json:"presaleapplyid" xorm:"PRESALEAPPLYID"` // 预售申请ID(184+Unix秒时间戳(10位)+xxxxxx)
  430. ENDMONTH string `json:"endmonth" xorm:"ENDMONTH"` // 预售结束月份(yyyy-mm)
  431. ENDDATE string `json:"enddate" xorm:"ENDDATE"` // 预售结束日期(yyyy-mm-dd)
  432. ORDERQTY int64 `json:"orderqty" xorm:"ORDERQTY"` // 委托数量
  433. TRADEQTY int64 `json:"tradeqty" xorm:"TRADEQTY"` // 成交数量
  434. REMAINQTY int64 `json:"remainqty" xorm:"REMAINQTY"` // 可用数量
  435. UNITPRICE float64 `json:"unitprice" xorm:"UNITPRICE"` // [参考价]商品单价
  436. }
  437. // THJPresaleApplyDeposit 支付方式
  438. type THJPresaleApplyDeposit struct {
  439. DEPOSITID int64 `json:"depositid" xorm:"DEPOSITID"` // 自增ID autoid
  440. PRESALEAPPLYID string `json:"presaleapplyid" xorm:"PRESALEAPPLYID"` // 预售申请ID(184+Unix秒时间戳(10位)+xxxxxx)
  441. DEPOSITRATE float64 `json:"depositrate" xorm:"DEPOSITRATE"` // 定金比例
  442. DISCOUNTAMOUNT float64 `json:"discountamount" xorm:"DISCOUNTAMOUNT"` // 优惠金额(每吨)
  443. }
  444. // THJSpotGoodsPriceLog 历史价格走势
  445. type THJSpotGoodsPriceLog struct {
  446. SPOTGOODSPRICE float64 `json:"spotgoodsprice" xorm:"SPOTGOODSPRICE"` // 现货价格
  447. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  448. }
  449. type THJWrstandardDetailReq struct {
  450. WRSTANDARDID int64 `form:"wrstandardid" binding:"required"` // 现货商品ID
  451. }
  452. // THJWrstandardDetailRsp 采购商品详情
  453. type THJWrstandardDetailRsp struct {
  454. GoodsInfo THJWrstandardDetail_GoodsInfo `json:"goodsinfo"` // 商品信息
  455. DeliveryModes []THJDeliveryMode `json:"deliverymodes"` // 交割方式
  456. DeliveryMonth []THJDeliveryMonth `json:"deliverymonth"` // 交割月份
  457. PresaleApplyDeposits []THJPresaleApplyDeposit `json:"presaleapplydeposits"` // 支付方式
  458. SpotGoodsPriceLogs []THJSpotGoodsPriceLog `json:"spotgoodspricelogs"` // 历史价格走势
  459. }
  460. // GetTHJWrstandardDetail 获取采购商品详情
  461. func (r *THJWrstandardDetailReq) GetTHJWrstandardDetail() (rsp *THJWrstandardDetailRsp, err error) {
  462. engine := db.GetEngine()
  463. rsp = new(THJWrstandardDetailRsp)
  464. // 采购商品信息
  465. var goodsInfo THJWrstandardDetail_GoodsInfo
  466. sql := fmt.Sprintf(`
  467. select
  468. t.WRSTANDARDID,
  469. t.WRSTANDARDCODE,
  470. t.WRSTANDARDNAME,
  471. t.PICTUREURLS,
  472. t.BANNERPICURL,
  473. t.UNITID,
  474. p.SPOTGOODSPRICE
  475. from wrstandard t
  476. left join ERMCP_SpotGoodsPrice p on t.WRSTANDARDID = p.WRSTANDARDID and p.spotgoodsbrandid=0 and p.currencyid = 1
  477. where t.WRSTANDARDID = %v
  478. `, r.WRSTANDARDID)
  479. if _, err = engine.SQL(sql).Get(&goodsInfo); err != nil {
  480. return
  481. }
  482. rsp.GoodsInfo = goodsInfo
  483. // 交割方式
  484. deliveryModes := make([]THJDeliveryMode, 0)
  485. sql = `
  486. select
  487. t.ENUMDICNAME,
  488. t.ENUMITEMNAME
  489. from enumdicitem t
  490. where t.enumdiccode = 'THJDeliveryMode'
  491. `
  492. if err = engine.SQL(sql).Find(&deliveryModes); err != nil {
  493. return
  494. }
  495. rsp.DeliveryModes = deliveryModes
  496. // 交割月份
  497. deliveryMonths := make([]THJDeliveryMonth, 0)
  498. sql = fmt.Sprintf(`
  499. select
  500. to_char(t.PRESALEAPPLYID) PRESALEAPPLYID,
  501. to_char(t.ENDDATE, 'yyyy-mm') ENDMONTH,
  502. to_char(t.ENDDATE, 'yyyy-mm-dd') ENDDATE,
  503. t.UNITPRICE,
  504. od.ORDERQTY,
  505. od.TRADEQTY,
  506. (od.orderqty - od.tradeqty) REMAINQTY
  507. from WR_PresaleInfo t
  508. inner join wrtrade_orderdetail od on t.sellwrtradeorderid = od.wrtradeorderid
  509. where t.wrstandardid = %v
  510. and t.presalestatus = 2
  511. and od.wrtradeorderstatus in (3, 7)
  512. and (od.orderqty - od.tradeqty) > 0
  513. order by t.enddate
  514. `, r.WRSTANDARDID)
  515. if err = engine.SQL(sql).Find(&deliveryMonths); err != nil {
  516. return
  517. }
  518. rsp.DeliveryMonth = deliveryMonths
  519. // 支付方式
  520. ids := make([]string, 0)
  521. for _, item := range deliveryMonths {
  522. ids = append(ids, item.PRESALEAPPLYID)
  523. }
  524. if len(ids) > 0 {
  525. presaleApplyDeposits := make([]THJPresaleApplyDeposit, 0)
  526. sql = fmt.Sprintf(`
  527. select
  528. t.AutoID DEPOSITID,
  529. to_char(t.PRESALEAPPLYID) PRESALEAPPLYID,
  530. t.DEPOSITRATE,
  531. t.DISCOUNTAMOUNT
  532. from THJ_PresaleApplyDeposit t
  533. where t.presaleapplyid in (%v)
  534. `, strings.Join(ids, ","))
  535. if err = engine.SQL(sql).Find(&presaleApplyDeposits); err != nil {
  536. return
  537. }
  538. rsp.PresaleApplyDeposits = presaleApplyDeposits
  539. }
  540. // 历史价格走势
  541. spotGoodsPriceLogs := make([]THJSpotGoodsPriceLog, 0)
  542. sql = fmt.Sprintf(`
  543. select
  544. t.SPOTGOODSPRICE,
  545. t.TRADEDATE
  546. from ERMCP_SpotGoodsPriceLog t
  547. where t.wrstandardid = %v
  548. order by t.operatetime
  549. `, r.WRSTANDARDID)
  550. if err = engine.SQL(sql).Find(&spotGoodsPriceLogs); err != nil {
  551. return
  552. }
  553. rsp.SpotGoodsPriceLogs = spotGoodsPriceLogs
  554. return
  555. }
  556. // Thjpurchasetradedetail 铁合金采购成交扩展表
  557. type Thjpurchasetradedetail struct {
  558. WRTRADEDETAILID string `json:"wrtradedetailid" xorm:"WRTRADEDETAILID"` // 采购成交单ID(321+Unix秒时间戳(10位)+xxxxxx)
  559. PRESALEAPPLYID string `json:"presaleapplyid" xorm:"PRESALEAPPLYID"` // 预售申请ID(184+Unix秒时间戳(10位)+xxxxxx)
  560. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  561. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  562. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID
  563. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  564. WRSTANDARDID int32 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  565. WAREHOUSEID int64 `json:"warehouseid" xorm:"WAREHOUSEID"` // 仓库ID
  566. BUYUSERID int64 `json:"buyuserid" xorm:"BUYUSERID" form:"userid" binding:"required"` // 买方用户ID
  567. BUYACCOUNTID int64 `json:"buyaccountid" xorm:"BUYACCOUNTID"` // 买方账号ID
  568. SELLUSERID int64 `json:"selluserid" xorm:"SELLUSERID"` // 卖方用户ID
  569. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID"` // 卖方账号ID
  570. TRADETIME time.Time `json:"tradetime" xorm:"TRADETIME"` // 摘牌时间
  571. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 摘牌价格 - 参考价
  572. TRADEQTY int64 `json:"tradeqty" xorm:"TRADEQTY"` // [预售价]摘牌数量
  573. TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT"` // 摘牌总货款
  574. DEPOSITRATE float64 `json:"depositrate" xorm:"DEPOSITRATE"` // 定金比例
  575. DISCOUNTAMOUNT float64 `json:"discountamount" xorm:"DISCOUNTAMOUNT"` // 优惠总金额(优惠金额*TradeQty)
  576. PAYEDDEPOSIT float64 `json:"payeddeposit" xorm:"PAYEDDEPOSIT"` // [定金]买方已付定金
  577. THJDELIVERYMODE int32 `json:"thjdeliverymode" xorm:"THJDELIVERYMODE"` // 交割方式 - 1:平台仓储 2:自提 3:代办运输 (枚举:THJDeliveryMode)
  578. CONTACTNAME string `json:"contactname" xorm:"CONTACTNAME"` // 联系人姓名
  579. CONTACTINFO string `json:"contactinfo" xorm:"CONTACTINFO"` // 联系方式
  580. DESADDRESS string `json:"desaddress" xorm:"DESADDRESS"` // 目的地地址
  581. RECEIPTINFO string `json:"receiptinfo" xorm:"RECEIPTINFO"` // 发票信息
  582. ORDERSTATUS int32 `json:"orderstatus" xorm:"ORDERSTATUS"` // 单据状态 - 1:待付尾款 2:支付尾款成功 3:支付尾款失败 4:已违约 5:卖方已确认 6:买方已确认 7:系统自动确认 (枚举:THJOrderStatus)
  583. LASTPRICE float64 `json:"lastprice" xorm:"LASTPRICE"` // [实际价]到期价格
  584. LASTAMOUNT float64 `json:"lastamount" xorm:"LASTAMOUNT"` // 到期总货款 = 到期价格 * 摘牌数量
  585. BUYCHARGEVALUE float64 `json:"buychargevalue" xorm:"BUYCHARGEVALUE"` // 买方到期手续费
  586. SELLCHARGEVALUE float64 `json:"sellchargevalue" xorm:"SELLCHARGEVALUE"` // 卖方到期手续费
  587. REMAINAMOUNT float64 `json:"remainamount" xorm:"REMAINAMOUNT"` // [尾款]剩余货款 = 到期总货款 - 已付定金 - 优惠金额
  588. SELLCONFIRMREMARK string `json:"sellconfirmremark" xorm:"SELLCONFIRMREMARK"` // 卖方确认备注
  589. SELLCONFIRMATTACH string `json:"sellconfirmattach" xorm:"SELLCONFIRMATTACH"` // 卖方确认附件
  590. SELLCONFIRMTIME time.Time `json:"sellconfirmtime" xorm:"SELLCONFIRMTIME"` // 卖方确认时间
  591. SELLCONFIRMTRADEDATE string `json:"sellconfirmtradedate" xorm:"SELLCONFIRMTRADEDATE"` // 卖方确认交易日
  592. BUYCONFIRMREMARK string `json:"buyconfirmremark" xorm:"BUYCONFIRMREMARK"` // 买方确认备注
  593. BUYCONFIRMTIME time.Time `json:"buyconfirmtime" xorm:"BUYCONFIRMTIME"` // 买方确认时间
  594. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态
  595. CONTRACTADDRBUY string `json:"contractaddrbuy" xorm:"CONTRACTADDRBUY"` // 贸易合同地址(买家)
  596. CONTRACTADDRSELL string `json:"contractaddrsell" xorm:"CONTRACTADDRSELL"` // 贸易合同地址(卖家)
  597. PAYEDTRADEDATE string `json:"payedtradedate" xorm:"PAYEDTRADEDATE"` // 支付尾款成功交易日
  598. BUYFREEZECHARGE float64 `json:"buyfreezecharge" xorm:"BUYFREEZECHARGE"` // 买方摘牌冻结手续费
  599. LASTPRICEDATE time.Time `json:"lastpricedate" xorm:"LASTPRICEDATE"` // 到期价格日期 - 暂不使用
  600. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  601. WAREHOUSENAME string `json:"warehousename" xorm:"WAREHOUSENAME"` // 仓库名称
  602. THJDELIVERYMODEDISPLAY string `json:"thjdeliverymodedisplay" xorm:"THJDELIVERYMODEDISPLAY"` // 提货方式
  603. THJORDERSTATUSDISPLAY string `json:"thjorderstatusdisplay" xorm:"THJORDERSTATUSDISPLAY"` // 状态
  604. ENDDATEMONTH string `json:"enddatemonth" xorm:"ENDDATEMONTH"` // 到期月份
  605. ENDDATE string `json:"enddate" xorm:"ENDDATE"` // 到期日期
  606. UNITID int32 `json:"unitid" xorm:"UNITID"` // 商品单位
  607. TRANSFERPRICE float64 `json:"transferprice" xorm:"TRANSFERPRICE"` // 转让价格 - 购买价
  608. TYPE int `json:"-" xorm:"-" form:"type"` // 类型 - 0:未完成 1:已完成
  609. PageEx `xorm:"extends"` // 页码信息
  610. }
  611. func (r *Thjpurchasetradedetail) calc() {
  612. }
  613. func (r *Thjpurchasetradedetail) buildSql() string {
  614. var sqlId utils.SQLVal = `
  615. select
  616. wr.WRSTANDARDNAME,
  617. wh.WAREHOUSENAME,
  618. en1.enumdicname THJDELIVERYMODEDISPLAY,
  619. en2.enumdicname THJORDERSTATUSDISPLAY,
  620. to_char(t.WRTRADEDETAILID) WRTRADEDETAILID,
  621. to_char(t.PRESALEAPPLYID) PRESALEAPPLYID,
  622. t.TRADEDATE,
  623. t.MARKETID,
  624. to_char(t.WRFACTORTYPEID) WRFACTORTYPEID,
  625. t.DELIVERYGOODSID,
  626. t.WRSTANDARDID,
  627. t.WAREHOUSEID,
  628. t.BUYUSERID,
  629. t.BUYACCOUNTID,
  630. t.SELLUSERID,
  631. t.SELLACCOUNTID,
  632. to_char(t.TRADETIME,'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  633. t.TRADEPRICE,
  634. t.TRADEQTY,
  635. t.TRADEAMOUNT,
  636. t.DEPOSITRATE,
  637. t.DISCOUNTAMOUNT,
  638. t.PAYEDDEPOSIT,
  639. t.THJDELIVERYMODE,
  640. t.CONTACTNAME,
  641. t.CONTACTINFO,
  642. t.DESADDRESS,
  643. t.RECEIPTINFO,
  644. t.ORDERSTATUS,
  645. t.LASTPRICE,
  646. t.LASTAMOUNT,
  647. t.BUYCHARGEVALUE,
  648. t.SELLCHARGEVALUE,
  649. t.REMAINAMOUNT,
  650. t.SELLCONFIRMREMARK,
  651. t.SELLCONFIRMATTACH,
  652. t.SELLCONFIRMTIME,
  653. t.SELLCONFIRMTRADEDATE,
  654. t.BUYCONFIRMREMARK,
  655. t.BUYCONFIRMTIME,
  656. t.HANDLESTATUS,
  657. t.CONTRACTADDRBUY,
  658. t.CONTRACTADDRSELL,
  659. t.PAYEDTRADEDATE,
  660. t.BUYFREEZECHARGE,
  661. t.LASTPRICEDATE,
  662. to_char(pi.enddate, 'yyyy-MM') ENDDATEMONTH,
  663. to_char(pi.enddate, 'yyyy-MM-dd') ENDDATE,
  664. wr.UNITID,
  665. t.TRANSFERPRICE
  666. from THJ_PurchaseTradeDetail t
  667. inner join WR_PresaleInfo pi
  668. on t.presaleapplyid = pi.presaleapplyid
  669. left join wrstandard wr
  670. on t.wrstandardid = wr.wrstandardid
  671. left join warehouseinfo wh
  672. on t.warehouseid = wh.autoid
  673. left join enumdicitem en1
  674. on en1.enumdiccode = 'THJDeliveryMode'
  675. and t.thjdeliverymode = en1.enumitemname
  676. left join enumdicitem en2
  677. on en2.enumdiccode = 'THJOrderStatus'
  678. and t.orderstatus = en2.enumitemname
  679. where t.buyuserid = %v
  680. and t.orderstatus in (4,6,7,8)
  681. order by t.tradetime desc
  682. `
  683. sqlId.FormatParam(r.BUYUSERID)
  684. sqlId.Page(r.Page, r.PageSize)
  685. return sqlId.String()
  686. }
  687. func (r *Thjpurchasetradedetail) buildSql2() string {
  688. var sqlId utils.SQLVal = `select aa.* from (
  689. select
  690. wr.WRSTANDARDNAME,
  691. wh.WAREHOUSENAME,
  692. en1.enumdicname THJDELIVERYMODEDISPLAY,
  693. en2.enumdicname THJORDERSTATUSDISPLAY,
  694. case t.orderstatus
  695. when 3 then 1
  696. when 5 then 2
  697. when 9 then 3
  698. when 1 then 10
  699. when 2 then 11
  700. else 20 end OrderIndex,
  701. t.WRTRADEDETAILID,
  702. t.PRESALEAPPLYID,
  703. t.TRADEDATE,
  704. t.MARKETID,
  705. t.WRFACTORTYPEID,
  706. t.DELIVERYGOODSID,
  707. t.WRSTANDARDID,
  708. t.WAREHOUSEID,
  709. t.BUYUSERID,
  710. t.BUYACCOUNTID,
  711. t.SELLUSERID,
  712. t.SELLACCOUNTID,
  713. to_char(t.TRADETIME,'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  714. t.TRADEPRICE,
  715. t.TRADEQTY,
  716. t.TRADEAMOUNT,
  717. t.DEPOSITRATE,
  718. t.DISCOUNTAMOUNT,
  719. t.PAYEDDEPOSIT,
  720. t.THJDELIVERYMODE,
  721. t.CONTACTNAME,
  722. t.CONTACTINFO,
  723. t.DESADDRESS,
  724. t.RECEIPTINFO,
  725. t.ORDERSTATUS,
  726. t.LASTPRICE,
  727. t.LASTAMOUNT,
  728. t.BUYCHARGEVALUE,
  729. t.SELLCHARGEVALUE,
  730. t.REMAINAMOUNT,
  731. t.SELLCONFIRMREMARK,
  732. t.SELLCONFIRMATTACH,
  733. t.SELLCONFIRMTIME,
  734. t.SELLCONFIRMTRADEDATE,
  735. t.BUYCONFIRMREMARK,
  736. t.BUYCONFIRMTIME,
  737. t.HANDLESTATUS,
  738. t.CONTRACTADDRBUY,
  739. t.CONTRACTADDRSELL,
  740. t.PAYEDTRADEDATE,
  741. t.BUYFREEZECHARGE,
  742. t.LASTPRICEDATE,
  743. to_char(pi.enddate, 'yyyy-MM') ENDDATEMONTH,
  744. to_char(pi.enddate, 'yyyy-MM-dd') ENDDATE,
  745. wr.UNITID,
  746. t.TRANSFERPRICE
  747. from THJ_PurchaseTradeDetail t
  748. inner join WR_PresaleInfo pi
  749. on t.presaleapplyid = pi.presaleapplyid
  750. left join wrstandard wr
  751. on t.wrstandardid = wr.wrstandardid
  752. left join warehouseinfo wh
  753. on t.warehouseid = wh.autoid
  754. left join enumdicitem en1
  755. on en1.enumdiccode = 'THJDeliveryMode'
  756. and t.thjdeliverymode = en1.enumitemname
  757. left join enumdicitem en2
  758. on en2.enumdiccode = 'THJOrderStatus'
  759. and t.orderstatus = en2.enumitemname
  760. where t.buyuserid = %v
  761. and t.orderstatus in (1,2,3,5,9)) aa
  762. order by aa.orderindex, aa.tradetime desc
  763. `
  764. sqlId.FormatParam(r.BUYUSERID)
  765. sqlId.Page(r.Page, r.PageSize)
  766. return sqlId.String()
  767. }
  768. func (r *Thjpurchasetradedetail) GetDataByPage() (interface{}, error, int, int, int) {
  769. sql := r.buildSql2()
  770. if r.TYPE == 1 {
  771. sql = r.buildSql()
  772. }
  773. sData := make([]Thjpurchasetradedetail, 0)
  774. err := db.GetEngine().SQL(sql).Find(&sData)
  775. total := 0
  776. for i := range sData {
  777. sData[i].calc()
  778. total = sData[i].Total
  779. }
  780. return sData, err, r.Page, r.PageSize, total
  781. }
  782. type ThjscoreconfigReq struct {
  783. STYPE string `form:"stype"` // [格式:1,2,3] 配置类型 - 1:注册红包 2:签到积分 3:推广积分 4:下级用户下单积分 5:自己采购下单积分 6:自己供求下单积分 7:抽奖配置
  784. }
  785. func (r *ThjscoreconfigReq) Get() (data []Thjscoreconfig, err error) {
  786. data = make([]Thjscoreconfig, 0)
  787. engine := db.GetEngine().NewSession()
  788. if r.STYPE != "" {
  789. engine = engine.Where(fmt.Sprintf("SCORECONFIGTYPE in (%v)", r.STYPE))
  790. }
  791. err = engine.Find(&data)
  792. return
  793. }
  794. type THJProduct struct {
  795. WRSTANDARDID string `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  796. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  797. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  798. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图(逗号分隔)
  799. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  800. THUMURLS string `json:"thumurls" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
  801. UserID int `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  802. FavoriteFlag bool `json:"-" xorm:"-" form:"favoriteflag"` // 关注标志 true-已关注 false-未关注
  803. PageEx `xorm:"extends"` // 页码信息
  804. }
  805. func (r *THJProduct) calc() {
  806. }
  807. func (r *THJProduct) buildSql() string {
  808. var sqlId utils.SQLVal = `
  809. select
  810. to_char(t.WRSTANDARDID) WRSTANDARDID,
  811. t.WRSTANDARDNAME,
  812. t.BANNERPICURL,
  813. t.PICTUREURLS,
  814. t.THUMURLS
  815. from wrstandard t
  816. where t.IsValid = 1
  817. and t.wrstandardid
  818. %v
  819. (select t.goodsid from UserFavoriteGoods t where t.userid = %v)
  820. `
  821. param := "not in"
  822. if r.FavoriteFlag {
  823. param = "in"
  824. }
  825. sqlId.FormatParam(param, r.UserID)
  826. sqlId.Page(r.Page, r.PageSize)
  827. return sqlId.String()
  828. }
  829. func (r *THJProduct) GetDataByPage() (interface{}, error, int, int, int) {
  830. sData := make([]THJProduct, 0)
  831. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  832. total := 0
  833. for i := range sData {
  834. sData[i].calc()
  835. total = sData[i].Total
  836. }
  837. return sData, err, r.Page, r.PageSize, total
  838. }
  839. type THJTradeData struct {
  840. RECKONDATE string `json:"reckondate" xorm:"RECKONDATE"` // 日照日期(yyyyMMdd)日照日期(yyyyMMdd)
  841. MARKETID int64 `json:"marketid" xorm:"MARKETID" form:"marketid" binding:"required"` // 市场ID 采购-64201 供求-65201
  842. BUYTRADELOT int32 `json:"buytradelot" xorm:"BUYTRADELOT"` // 购买笔数
  843. BUYTRADEQTY float64 `json:"buytradeqty" xorm:"BUYTRADEQTY"` // 购买数量
  844. SELLTRADELOT int32 `json:"selltradelot" xorm:"SELLTRADELOT"` // 销售笔数
  845. SELLTRADEQTY float64 `json:"selltradeqty" xorm:"SELLTRADEQTY"` // 销售数量
  846. USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  847. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  848. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME"` // 被推荐人
  849. PageEx `xorm:"extends"` // 页码信息
  850. }
  851. func (r *THJTradeData) calc() {
  852. r.ACCOUNTNAME = EncryptByStar(r.ACCOUNTNAME)
  853. }
  854. func (r *THJTradeData) buildSql() string {
  855. var sqlId utils.SQLVal = `
  856. select
  857. a.*
  858. from
  859. (select
  860. to_char(to_date(t.reckondate, 'yyyymmdd'), 'yyyy-mm-dd') RECKONDATE,
  861. wr.WRSTANDARDNAME,
  862. ua.ACCOUNTNAME,
  863. t.BUYTRADEQTY,
  864. t.BUYTRADELOT,
  865. t.SELLTRADEQTY,
  866. t.SELLTRADELOT,
  867. t.updatetime
  868. from Reckon_WRTradeSum t
  869. left join wrstandard wr on t.wrstandardid = wr.wrstandardid
  870. left join useraccount ua on t.userid = ua.userid
  871. where
  872. t.refereeuserid = %v
  873. and
  874. t.marketid = %v) a
  875. order by a.updatetime desc
  876. `
  877. sqlId.FormatParam(r.USERID, r.MARKETID)
  878. sqlId.Page(r.Page, r.PageSize)
  879. return sqlId.String()
  880. }
  881. func (r *THJTradeData) GetDataByPage() (interface{}, error, int, int, int) {
  882. sData := make([]THJTradeData, 0)
  883. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  884. total := 0
  885. for i := range sData {
  886. sData[i].calc()
  887. total = sData[i].Total
  888. }
  889. return sData, err, r.Page, r.PageSize, total
  890. }
  891. // THJGoodsDetailReq 商品详情
  892. type THJGoodsDetailReq struct {
  893. WRSTANDARDID int64 `form:"wrstandardid" binding:"required"` // 现货商品ID
  894. }
  895. // THJGoodsDetailRsp 商品详情
  896. type THJGoodsDetailRsp struct {
  897. GoodsInfo THJWrstandardDetail_GoodsInfo `json:"goodsinfo"` // 商品信息
  898. SpotGoodsPriceLogs []THJSpotGoodsPriceLog `json:"spotgoodspricelogs"` // 历史价格走势
  899. }
  900. func (r *THJGoodsDetailReq) GetTHJGoodsDetail() (rsp *THJGoodsDetailRsp, err error) {
  901. engine := db.GetEngine()
  902. rsp = new(THJGoodsDetailRsp)
  903. // 采购商品信息
  904. var goodsInfo THJWrstandardDetail_GoodsInfo
  905. sql := fmt.Sprintf(`
  906. select
  907. t.WRSTANDARDID,
  908. t.WRSTANDARDCODE,
  909. t.WRSTANDARDNAME,
  910. t.PICTUREURLS,
  911. t.BANNERPICURL,
  912. p.SPOTGOODSPRICE
  913. from wrstandard t
  914. left join ERMCP_SpotGoodsPrice p on t.WRSTANDARDID = p.WRSTANDARDID and p.spotgoodsbrandid=0 and p.currencyid = 1
  915. where t.WRSTANDARDID = %v
  916. `, r.WRSTANDARDID)
  917. if _, err = engine.SQL(sql).Get(&goodsInfo); err != nil {
  918. return
  919. }
  920. rsp.GoodsInfo = goodsInfo
  921. // 历史价格走势
  922. spotGoodsPriceLogs := make([]THJSpotGoodsPriceLog, 0)
  923. sql = fmt.Sprintf(`
  924. select
  925. t.SPOTGOODSPRICE,
  926. t.TRADEDATE
  927. from ERMCP_SpotGoodsPriceLog t
  928. where t.wrstandardid = %v
  929. and t.SPOTGOODSBRANDID = 0
  930. and t.CURRENCYID = 1
  931. order by t.LogID
  932. `, r.WRSTANDARDID)
  933. if err = engine.SQL(sql).Find(&spotGoodsPriceLogs); err != nil {
  934. return
  935. }
  936. rsp.SpotGoodsPriceLogs = spotGoodsPriceLogs
  937. return
  938. }
  939. type PurchaseTransfer struct {
  940. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  941. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  942. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME" form:"wrstandardname"` // 现货商品名称(模糊查询)
  943. UNITID int32 `json:"unitid" xorm:"UNITID"` // 现货商品单位ID
  944. THUMURLS string `json:"thumurls" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
  945. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  946. REFGOODSID int64 `json:"refgoodsid" xorm:"REFGOODSID"` // 参考商品ID
  947. PageEx `xorm:"extends"` // 页码信息
  948. }
  949. func (r *PurchaseTransfer) calc() {
  950. }
  951. func (r *PurchaseTransfer) buildSql() string {
  952. var sqlId utils.SQLVal = `
  953. select
  954. wr.WRSTANDARDID ,
  955. wr.WRSTANDARDCODE,
  956. wr.WRSTANDARDNAME,
  957. wr.UNITID ,
  958. wr.THUMURLS ,
  959. wr.PICTUREURLS ,
  960. wr.REFGOODSID
  961. from wrstandard wr
  962. where wr.wrstandardid in (
  963. select td.wrstandardid
  964. from THJ_PurchaseTransfer t
  965. inner join THJ_PurchaseTradeDetail td on t.wrtradedetailid = td.wrtradedetailid
  966. where t.TransferStatus = 1)
  967. and %v
  968. order by wr.wrstandardname
  969. `
  970. param := "1=1"
  971. if r.WRSTANDARDNAME != "" {
  972. param = fmt.Sprintf("wr.wrstandardname like '%%%v%%'", r.WRSTANDARDNAME)
  973. }
  974. sqlId.FormatParam(param)
  975. sqlId.Page(r.Page, r.PageSize)
  976. return sqlId.String()
  977. }
  978. func (r *PurchaseTransfer) GetDataByPage() (interface{}, error, int, int, int) {
  979. sData := make([]PurchaseTransfer, 0)
  980. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  981. total := 0
  982. for i := range sData {
  983. sData[i].calc()
  984. total = sData[i].Total
  985. }
  986. return sData, err, r.Page, r.PageSize, total
  987. }
  988. type THJPurchaseTradeDetail_Goodsinfo struct {
  989. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  990. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  991. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME" form:"wrstandardname"` // 现货商品名称(模糊查询)
  992. UNITID int32 `json:"unitid" xorm:"UNITID"` // 现货商品单位ID
  993. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  994. REFGOODSID int64 `json:"refgoodsid" xorm:"REFGOODSID"` // 参考商品ID
  995. REFGOODSCODE string `json:"refgoodscode" xorm:"REFGOODSCODE"` // 参考商品代码
  996. }
  997. type THJPurchaseTradeDetail_Date struct {
  998. ENDDATE string `json:"enddate" xorm:"ENDDATE"` // 预售结束日期
  999. DEPOSITRATE float64 `json:"depositrate" xorm:"DEPOSITRATE"` // 定金比例
  1000. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 摘牌价格
  1001. TRADEQTY int64 `json:"tradeqty" xorm:"TRADEQTY"` // 摘牌数量
  1002. TRANSFERID string `json:"transferid" xorm:"TRANSFERID"` // 协议转让ID(332+Unix秒时间戳(10位)+xxxxxx)
  1003. TRANSFERPRICE float64 `json:"transferprice" xorm:"TRANSFERPRICE"` // 转让价格
  1004. TRANSFERAMOUNT float64 `json:"transferamount" xorm:"TRANSFERAMOUNT"` // 转让金额
  1005. }
  1006. type HistoryData struct {
  1007. Opened float64 `json:"o"` // 开盘价
  1008. Highest float64 `json:"h"` // 最高价
  1009. Lowest float64 `json:"l"` // 最低价
  1010. Closed float64 `json:"c"` // 收盘价
  1011. TotleVolume int `json:"tv"` // 总量(成交量)
  1012. TotleTurnover float64 `json:"tt"` // 总金额
  1013. HoldVolume int `json:"hv"` // 持仓量
  1014. Settle float64 `json:"s"` // 结算价,日线周期(包括)以上才有
  1015. TimeStamp time.Time `json:"ts"` // 时间
  1016. IsFill bool `json:"f"` // 是否补充数据
  1017. }
  1018. type THJPurchaseTradeDetailReq struct {
  1019. WRSTANDARDID int64 `form:"wrstandardid" binding:"required"` // 现货商品ID
  1020. }
  1021. // THJPurchaseTradeDetailRsp 合同转让详情
  1022. type THJPurchaseTradeDetailRsp struct {
  1023. GoodsInfo THJPurchaseTradeDetail_Goodsinfo `json:"goodsinfo"` // 商品信息
  1024. DeliveryDates []THJPurchaseTradeDetail_Date `json:"deliverydate"` // 交割日期
  1025. History []HistoryData `json:"history"` // 历史价格走势(历史数据日线)
  1026. }
  1027. // GetTHJWrstandardDetail 获取采购商品详情
  1028. func (r *THJPurchaseTradeDetailReq) GetData() (rsp *THJPurchaseTradeDetailRsp, err error) {
  1029. engine := db.GetEngine()
  1030. rsp = new(THJPurchaseTradeDetailRsp)
  1031. // 采购商品信息
  1032. var goodsInfo THJPurchaseTradeDetail_Goodsinfo
  1033. sql := fmt.Sprintf(`
  1034. select
  1035. t.WRSTANDARDID ,
  1036. t.WRSTANDARDCODE,
  1037. t.WRSTANDARDNAME,
  1038. t.UNITID ,
  1039. t.PICTUREURLS ,
  1040. t.REFGOODSID ,
  1041. t.REFGOODSCODE
  1042. from wrstandard t
  1043. where t.wrstandardid = %v
  1044. `, r.WRSTANDARDID)
  1045. if _, err = engine.SQL(sql).Get(&goodsInfo); err != nil {
  1046. return
  1047. }
  1048. rsp.GoodsInfo = goodsInfo
  1049. // 交割日期
  1050. deliveryDates := make([]THJPurchaseTradeDetail_Date, 0)
  1051. sql = fmt.Sprintf(`
  1052. select
  1053. pi.ENDDATE,
  1054. td.DEPOSITRATE,
  1055. td.TRADEPRICE,
  1056. td.TRADEQTY,
  1057. t.TRANSFERPRICE,
  1058. t.TRANSFERAMOUNT,
  1059. wr.REFGOODSID,
  1060. to_char(t.TRANSFERID) TRANSFERID
  1061. from THJ_PurchaseTransfer t
  1062. inner join THJ_PurchaseTradeDetail td on t.wrtradedetailid = td.wrtradedetailid
  1063. inner join WR_PresaleInfo pi on t.presaleapplyid = pi.presaleapplyid
  1064. inner join wrstandard wr on wr.wrstandardid = td.wrstandardid
  1065. where t.transferstatus = 1 and td.wrstandardid = %v
  1066. `, r.WRSTANDARDID)
  1067. if err = engine.SQL(sql).Find(&deliveryDates); err != nil {
  1068. return
  1069. }
  1070. rsp.DeliveryDates = deliveryDates
  1071. // 历史价格走势
  1072. cycleDatas, err := GetHistoryCycleDatas(CycleTypeMinutesDay, goodsInfo.REFGOODSCODE, nil, nil, 50, false)
  1073. if err != nil {
  1074. return
  1075. }
  1076. // 获取目标商品报价小数位
  1077. dcplace := mtpcache.GetGoodsDecimalplace(goodsInfo.REFGOODSCODE)
  1078. // 计算最终价格
  1079. rst := make([]HistoryData, 0)
  1080. for _, v := range cycleDatas {
  1081. historyData := HistoryData{
  1082. Opened: utils.IntToFloat64(v.Open, dcplace),
  1083. Highest: utils.IntToFloat64(v.High, dcplace),
  1084. Lowest: utils.IntToFloat64(v.Low, dcplace),
  1085. Closed: utils.IntToFloat64(v.Close, dcplace),
  1086. TotleVolume: v.TV,
  1087. TotleTurnover: float64(v.TT),
  1088. HoldVolume: v.HV,
  1089. Settle: utils.IntToFloat64(v.SP, dcplace),
  1090. TimeStamp: time.Unix(int64(v.ST), 0),
  1091. }
  1092. rst = append(rst, historyData)
  1093. }
  1094. rsp.History = rst
  1095. return
  1096. }
  1097. // Thjpurchasetransfer 铁合金采购协议表
  1098. type Thjpurchasetransfer struct {
  1099. TRANSFERID string `json:"transferid" xorm:"TRANSFERID"` // 协议转让ID(332+Unix秒时间戳(10位)+xxxxxx)
  1100. WRTRADEDETAILID string `json:"wrtradedetailid" xorm:"WRTRADEDETAILID"` // 采购成交单ID(321+Unix秒时间戳(10位)+xxxxxx)
  1101. PRESALEAPPLYID string `json:"presaleapplyid" xorm:"PRESALEAPPLYID"` // 预售申请ID(184+Unix秒时间戳(10位)+xxxxxx)
  1102. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1103. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID
  1104. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  1105. WRSTANDARDID int32 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1106. WAREHOUSEID int64 `json:"warehouseid" xorm:"WAREHOUSEID"` // 仓库ID
  1107. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID(固定为(64202)
  1108. SELLUSERID int64 `json:"selluserid" xorm:"SELLUSERID"` // 卖方用户ID
  1109. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID"` // 卖方账号ID
  1110. TRANSFERQTY int64 `json:"transferqty" xorm:"TRANSFERQTY"` // 数量
  1111. TRANSFERPRICE float64 `json:"transferprice" xorm:"TRANSFERPRICE"` // 转让价格
  1112. TRANSFERAMOUNT float64 `json:"transferamount" xorm:"TRANSFERAMOUNT"` // 转让金额
  1113. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  1114. BUYUSERID int64 `json:"buyuserid" xorm:"BUYUSERID"` // 买方用户ID
  1115. BUYACCOUNTID int64 `json:"buyaccountid" xorm:"BUYACCOUNTID"` // 买方账号ID
  1116. CONTRACTADDR string `json:"contractaddr" xorm:"CONTRACTADDR"` // 协议转让合同地址
  1117. SELLCHARGEALGORITHM int32 `json:"sellchargealgorithm" xorm:"SELLCHARGEALGORITHM"` // 卖方手续费收取方式 1:比率 2:固定
  1118. SELLCHARGEALGORITHMVALUE float64 `json:"sellchargealgorithmvalue" xorm:"SELLCHARGEALGORITHMVALUE"` // 手续费设置值(交易所部分)
  1119. SELLCHARGE float64 `json:"sellcharge" xorm:"SELLCHARGE"` // 卖方手续费值
  1120. TRANSFERTRADEDATE string `json:"transfertradedate" xorm:"TRANSFERTRADEDATE"` // 转让交易日
  1121. TRANSFERSTATUS int32 `json:"transferstatus" xorm:"TRANSFERSTATUS"` // 转让状态 - 1:挂牌中 2:已撤销 3:处理中 4:已转让
  1122. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态
  1123. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 预售价格
  1124. PAYEDDEPOSIT float64 `json:"payeddeposit" xorm:"PAYEDDEPOSIT"` // 买方已付定金
  1125. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  1126. USERID int64 `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  1127. ORDERTYPE int `json:"ordertype" xorm:"ORDERTYPE" form:"ordertype" binding:"required"` // 类型 - 1:转让委托 - 挂牌中(卖方) 2:转让成交(卖方) 3:转让委托 - 已完成(卖方)
  1128. UNITID int32 `json:"unitid" xorm:"UNITID"` // 现货商品单位ID
  1129. PageEx `xorm:"extends"` // 页码信息
  1130. }
  1131. func (r *Thjpurchasetransfer) calc() {
  1132. }
  1133. func (r *Thjpurchasetransfer) buildSql() string {
  1134. var sqlId utils.SQLVal = `
  1135. select
  1136. wr.WRSTANDARDNAME,
  1137. p.TRADEPRICE,
  1138. p.PAYEDDEPOSIT,
  1139. to_char(t.TRANSFERID) TRANSFERID,
  1140. to_char(t.WRTRADEDETAILID) WRTRADEDETAILID,
  1141. to_char(t.PRESALEAPPLYID) PRESALEAPPLYID,
  1142. t.TRADEDATE,
  1143. to_char(t.WRFACTORTYPEID) WRFACTORTYPEID,
  1144. t.DELIVERYGOODSID,
  1145. t.WRSTANDARDID,
  1146. t.WAREHOUSEID,
  1147. t.MARKETID,
  1148. t.SELLUSERID,
  1149. t.SELLACCOUNTID,
  1150. t.TRANSFERQTY,
  1151. t.TRANSFERPRICE,
  1152. t.TRANSFERAMOUNT,
  1153. t.REMARK,
  1154. t.BUYUSERID,
  1155. t.BUYACCOUNTID,
  1156. t.CONTRACTADDR,
  1157. t.SELLCHARGEALGORITHM,
  1158. t.SELLCHARGEALGORITHMVALUE,
  1159. t.SELLCHARGE,
  1160. t.TRANSFERTRADEDATE,
  1161. t.TRANSFERSTATUS,
  1162. t.HANDLESTATUS,
  1163. wr.UNITID,
  1164. %v ORDERTYPE
  1165. from THJ_PurchaseTransfer t
  1166. inner join THJ_PurchaseTradeDetail p on t.wrtradedetailid = p.wrtradedetailid
  1167. inner join wrstandard wr on t.wrstandardid = wr.wrstandardid
  1168. where %v and 1=1
  1169. `
  1170. //转让委托 - 挂牌中 -卖方
  1171. param := fmt.Sprintf("t.selluserid = %v and t.transferstatus = 1", r.USERID)
  1172. if r.ORDERTYPE == 2 {
  1173. //转让成交 - 买方
  1174. param = fmt.Sprintf("t.buyuserid = %v", r.USERID)
  1175. } else if r.ORDERTYPE == 3 {
  1176. //转让委托 - 已完成 - 卖方
  1177. param = fmt.Sprintf("t.selluserid = %v and t.transferstatus in (2,3,4)", r.USERID)
  1178. }
  1179. sqlId.FormatParam(r.ORDERTYPE, param)
  1180. sqlId.Page(r.Page, r.PageSize)
  1181. return sqlId.String()
  1182. }
  1183. func (r *Thjpurchasetransfer) GetDataByPage() (interface{}, error, int, int, int) {
  1184. sData := make([]Thjpurchasetransfer, 0)
  1185. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1186. total := 0
  1187. for i := range sData {
  1188. sData[i].calc()
  1189. total = sData[i].Total
  1190. }
  1191. return sData, err, r.Page, r.PageSize, total
  1192. }
  1193. type ThjpurchasetransferDetail struct {
  1194. WRTRADEDETAILID int64 `json:"-" xorm:"WRTRADEDETAILID" form:"wrtradedetailid"` // 采购成交单ID(321+Unix秒时间戳(10位)+xxxxxx)
  1195. TRANSFERID string `json:"transferid" xorm:"TRANSFERID"` // 转让单号
  1196. WRSTANDARDID int32 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1197. TRANSFERPRICE float64 `json:"transferprice" xorm:"TRANSFERPRICE"` // 转让价格
  1198. TRANSFERAMOUNT float64 `json:"transferamount" xorm:"TRANSFERAMOUNT"` // 转让金额
  1199. TRANSFERSTATUS int32 `json:"transferstatus" xorm:"TRANSFERSTATUS"` // 转让状态 - 1:挂牌中 2:已撤销 3:处理中 4:已转让
  1200. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 预售价格
  1201. PAYEDDEPOSIT float64 `json:"payeddeposit" xorm:"PAYEDDEPOSIT"` // 买方已付定金
  1202. CONTRACTADDRBUY string `json:"contractaddrbuy" xorm:"CONTRACTADDRBUY"` // 贸易合同地址(买家)
  1203. CONTRACTADDRSELL string `json:"contractaddrsell" xorm:"CONTRACTADDRSELL"` // 贸易合同地址(卖家)
  1204. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  1205. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  1206. WAREHOUSENAME string `json:"warehousename" xorm:"WAREHOUSENAME"` // 仓库名称
  1207. BUYUSERNAME string `json:"buyusername" xorm:"BUYUSERNAME"` // 受让人
  1208. SELLUSERNAME string `json:"sellusername" xorm:"SELLUSERNAME"` // 转让人
  1209. TRANSFERQTY int32 `json:"transferqty" xorm:"TRANSFERQTY"` // 转让数量
  1210. }
  1211. func (r *ThjpurchasetransferDetail) calc() {
  1212. }
  1213. func (r *ThjpurchasetransferDetail) buildSql() string {
  1214. var sqlId utils.SQLVal = `
  1215. select
  1216. to_char(t.TRANSFERID) TRANSFERID,
  1217. t.WRSTANDARDID,
  1218. t.TRANSFERPRICE,
  1219. t.TRANSFERAMOUNT,
  1220. t.TRANSFERSTATUS,
  1221. d.TRADEPRICE,
  1222. d.PAYEDDEPOSIT,
  1223. d.CONTRACTADDRBUY,
  1224. d.CONTRACTADDRSELL,
  1225. wr.WRSTANDARDCODE,
  1226. wr.WRSTANDARDNAME,
  1227. wh.WAREHOUSENAME,
  1228. u1.accountname BUYUSERNAME,
  1229. u2.accountname SELLUSERNAME,
  1230. t.TRANSFERQTY
  1231. from THJ_PurchaseTransfer t
  1232. inner join THJ_PurchaseTradeDetail d on d.WRTRADEDETAILID = t.WRTRADEDETAILID
  1233. left join wrstandard wr on wr.wrstandardid = t.wrstandardid
  1234. left join WAREHOUSEINFO wh on wh.autoid = t.warehouseid
  1235. left join useraccount u1 on u1.userid = t.buyuserid
  1236. left join useraccount u2 on u2.userid = t.selluserid
  1237. where t.WRTRADEDETAILID = %v
  1238. `
  1239. sqlId.FormatParam(r.WRTRADEDETAILID)
  1240. return sqlId.String()
  1241. }
  1242. // GetDataEx 从数据库中查询数据
  1243. func (r *ThjpurchasetransferDetail) GetDataEx() (interface{}, error) {
  1244. e := db.GetEngine()
  1245. s := e.SQL(r.buildSql())
  1246. sData := make([]ThjpurchasetransferDetail, 0)
  1247. if err := s.Find(&sData); err != nil {
  1248. return nil, err
  1249. }
  1250. for i := range sData {
  1251. sData[i].calc()
  1252. }
  1253. return sData, nil
  1254. }
  1255. type PromotionIncome struct {
  1256. PROFITMONTH string `json:"profitmonth" xorm:"PROFITMONTH"` // 时间
  1257. WRSTANDARDID int32 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1258. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  1259. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  1260. SUMAMOUNT float64 `json:"sumamount" xorm:"SUMAMOUNT"` // 金额
  1261. PROFITSTATUS int32 `json:"profitstatus" xorm:"PROFITSTATUS" form:"profitstatus"` // 状态 - 0:全部 1:已支付 2:未支付
  1262. USERID int64 `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  1263. PageEx `xorm:"extends"` // 页码信息
  1264. }
  1265. func (r *PromotionIncome) calc() {
  1266. }
  1267. func (r *PromotionIncome) buildSql() string {
  1268. var sqlId utils.SQLVal = `
  1269. select
  1270. substr(t.reckondate, 0, 6) PROFITMONTH,
  1271. t.WRSTANDARDID,
  1272. wr.WRSTANDARDCODE,
  1273. wr.WRSTANDARDNAME,
  1274. sum(t.profitamount) SUMAMOUNT
  1275. from THJ_Reckon_ProfitSum t
  1276. left join wrstandard wr on t.wrstandardid = wr.wrstandardid
  1277. where t.userid = %v and %v
  1278. group by substr(t.reckondate, 0, 6), t.wrstandardid, wr.WRSTANDARDCODE, wr.wrstandardname
  1279. order by substr(t.reckondate, 0, 6) desc, t.wrstandardid, wr.wrstandardname
  1280. `
  1281. param := "1=1"
  1282. if r.PROFITSTATUS > 0 {
  1283. param = fmt.Sprintf("t.profitstatus = %v", r.PROFITSTATUS)
  1284. }
  1285. sqlId.FormatParam(r.USERID, param)
  1286. sqlId.Page(r.Page, r.PageSize)
  1287. return sqlId.String()
  1288. }
  1289. func (r *PromotionIncome) GetDataByPage() (interface{}, error, int, int, int) {
  1290. sData := make([]PromotionIncome, 0)
  1291. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1292. total := 0
  1293. for i := range sData {
  1294. sData[i].calc()
  1295. total = sData[i].Total
  1296. }
  1297. return sData, err, r.Page, r.PageSize, total
  1298. }
  1299. type PromotionIncomeDetail struct {
  1300. TRADETIME string `json:"tradetime" xorm:"TRADETIME"` // 时间
  1301. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  1302. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  1303. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  1304. MARKET string `json:"market" xorm:"MARKET"` // 市场
  1305. BUYORSELL string `json:"buyorsell" xorm:"BUYORSELL"` // 方向
  1306. PROFITROLETYPE string `json:"profitroletype" xorm:"PROFITROLETYPE"` // 级别
  1307. PROFITAMOUNT float64 `json:"profitamount" xorm:"PROFITAMOUNT"` // 金额
  1308. USERID int64 `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  1309. MOUTH string `json:"-" xorm:"-" form:"mouth" binding:"required"` // 月份,格式:yyyymm
  1310. PageEx `xorm:"extends"` // 页码信息
  1311. }
  1312. func (r *PromotionIncomeDetail) calc() {
  1313. }
  1314. func (r *PromotionIncomeDetail) buildSql() string {
  1315. var sqlId utils.SQLVal = `
  1316. select
  1317. to_char(t.TRADETIME,'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  1318. wr.WRSTANDARDID,
  1319. wr.WRSTANDARDCODE,
  1320. wr.WRSTANDARDNAME,
  1321. case t.marketid when 64201 then '采购' else '供求' end MARKET,
  1322. case t.buyorsell when 0 then '采购' else '销售' end BUYORSELL,
  1323. case t.profitroletype when 3 then '一级' else '二级' end PROFITROLETYPE,
  1324. t.PROFITAMOUNT
  1325. from THJ_Reckon_ProfitRecode t
  1326. left join wrstandard wr on t.wrstandardid = wr.wrstandardid
  1327. where substr(t.tradedate,0,6) = '%v' and t.userid = %v and t.profitroletype in (3,4)
  1328. order by t.tradeid desc
  1329. `
  1330. sqlId.FormatParam(r.MOUTH, r.USERID)
  1331. sqlId.Page(r.Page, r.PageSize)
  1332. return sqlId.String()
  1333. }
  1334. func (r *PromotionIncomeDetail) GetDataByPage() (interface{}, error, int, int, int) {
  1335. sData := make([]PromotionIncomeDetail, 0)
  1336. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1337. total := 0
  1338. for i := range sData {
  1339. sData[i].calc()
  1340. total = sData[i].Total
  1341. }
  1342. return sData, err, r.Page, r.PageSize, total
  1343. }