qysds.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. package TaxSb
  2. import (
  3. "context"
  4. "fmt"
  5. "git.listensoft.net/tool/jspkit/common"
  6. "git.listensoft.net/tool/jspkit/common/models"
  7. "git.listensoft.net/tool/jspkit/common/models/sb"
  8. "git.listensoft.net/tool/jspkit/common/variable"
  9. "git.listensoft.net/tool/jspkit/taxerr"
  10. "math"
  11. "strings"
  12. "time"
  13. "github.com/go-rod/rod"
  14. "github.com/go-rod/rod/lib/utils"
  15. )
  16. func SbQysds(ctx context.Context, newp *rod.Page, info models.CompanyInfo, task *models.TaxTask) {
  17. var A200000 sb.GsTaxQuarter
  18. if ok := common.GetData(variable.GsTaxQuarter, task.Data, &A200000); !ok {
  19. panic(taxerr.QysdsEmpty)
  20. }
  21. a7 := []sb.GsTaxQuarterFb1{}
  22. if ok := common.GetData(variable.GsTaxQuarterFb1, task.Data, &a7); !ok {
  23. panic(taxerr.QysdsFb1Empty)
  24. }
  25. a8 := []sb.GsTaxQuarterFb2{}
  26. if ok := common.GetData(variable.GsTaxQuarterFb2, task.Data, &a8); !ok {
  27. panic(taxerr.QysdsFb2Empty)
  28. }
  29. a13 := []sb.GsTaxQuarterFb3{}
  30. if ok := common.GetData(variable.GsTaxQuarterFb3, task.Data, &a13); !ok {
  31. panic(taxerr.QysdsFb3Empty)
  32. }
  33. err := rod.Try(func() {
  34. //是否简易模式
  35. if newp.Timeout(common.ClickTimeOut).MustHas(`body > div.t-dialog__ctx.t-dialog__ctx--fixed > div.t-dialog__wrap > div > div > div.t-dialog__header > div`) {
  36. newp.Timeout(common.ClickTimeOut).MustElement(`body > div.t-dialog__ctx.t-dialog__ctx--fixed > div.t-dialog__wrap > div > div > div.t-dialog__footer > div > button.t-button.t-button--variant-base.t-button--theme-default`).MustClick()
  37. }
  38. utils.Sleep(3)
  39. //span[contains(text(), "继续办理")]
  40. if newp.Timeout(common.ClickTimeOut).MustHasX(`//span[contains(text(), "继续办理")]`) {
  41. newp.Timeout(common.ClickTimeOut).MustElementX(`//span[contains(text(), "继续办理")]`).MustClick()
  42. }
  43. if newp.MustHasX(`//span[contains(text(), "您本属期已申报")]`) {
  44. task.Result.BusinessStatus = variable.TaxSuccess
  45. task.Result.BusinessImg = SaveErrImg(newp, info)
  46. return
  47. }
  48. if newp.MustHasR(`body > section > section > section > main > div > div > div > div.gov-inspect > div.gov-inspect-header > div.gov-inspect-header__status-text`, "检测不通过") {
  49. errMsg := newp.Timeout(common.ClickTimeOut).MustElement(`body > section > section > section > main > div > div > div > div.gov-inspect > div.gov-inspect-table > div > div > div > div > span.gov-inspect-item__text > span`).MustText()
  50. task.Result.BusinessStatus = variable.TaxFail
  51. task.Result.BusinessImg = SaveErrImg(newp, info)
  52. panic(taxerr.NewUserV3(errMsg, "请核实后重试"))
  53. }
  54. //检测不通过 返回首页
  55. if newp.Timeout(common.ClickTimeOut).MustHasX(`//span[contains(text(), "返回首页")]`) {
  56. task.Result.BusinessStatus = variable.TaxFail
  57. task.Result.BusinessLog = "检测不通过"
  58. task.Result.BusinessImg = SaveErrImg(newp, info)
  59. return
  60. }
  61. utils.Sleep(1)
  62. //您符合简易申报条件,是否确定简易申报?
  63. if newp.Timeout(common.ClickTimeOut).MustHas(`body > div.t-dialog__ctx.t-dialog__ctx--fixed > div.t-dialog__wrap > div > div > div.t-dialog__header > div`) {
  64. newp.Timeout(common.ClickTimeOut).MustElement(`body > div.t-dialog__ctx.t-dialog__ctx--fixed > div.t-dialog__wrap > div > div > div.t-dialog__footer > div > button`).MustClick()
  65. }
  66. utils.Sleep(5)
  67. if newp.Timeout(common.ClickTimeOut).MustHasR(`body > div.t-dialog__ctx.t-dialog__ctx--fixed > div.t-dialog__wrap > div > div > div.t-dialog__body.t-dialog__body--icon`, "您符合简易申报条件,是否确定简易申报?") {
  68. //取消
  69. newp.Timeout(common.ClickTimeOut).MustSearch(`取消`).MustClick()
  70. utils.Sleep(3)
  71. }
  72. if newp.Timeout(common.ClickTimeOut).MustHas(`body > div.t-dialog__ctx.t-dialog__ctx--fixed > div.t-dialog__wrap > div > div > div.t-dialog__header > div`) {
  73. newp.Timeout(common.ClickTimeOut).MustElement(`body > div.t-dialog__ctx.t-dialog__ctx--fixed > div.t-dialog__wrap > div > div > div.t-dialog__footer > div > button.t-button.t-button--variant-base.t-button--theme-default`).MustClick() //取消
  74. }
  75. qysdsDeclareDo(ctx, newp, info, A200000, a7, a8, a13, task)
  76. })
  77. if err != nil {
  78. task.Result.BusinessStatus = variable.TaxFail
  79. task.Result.BusinessLog = common.HandleError(ctx, err).Error()
  80. return
  81. }
  82. }
  83. func qysdsDeclareDo(ctx context.Context, newp *rod.Page, info models.CompanyInfo, A200000 sb.GsTaxQuarter, a7 []sb.GsTaxQuarterFb1, a8 []sb.GsTaxQuarterFb2, a13 []sb.GsTaxQuarterFb3, task *models.TaxTask) {
  84. err := rod.Try(func() {
  85. curperiodFl := common.StrToFloat(info.Period[4:])
  86. //判断当前第几季度 按季度填报信息
  87. jd := 0
  88. i := 0
  89. var jccyrs string //季初从业人数
  90. var jmcyrs string //季末从业人数
  91. var jczcze string //季初资产总额
  92. var jmzcze string //季末资产总额
  93. err2 := checkQysds20000(newp, A200000, curperiodFl)
  94. if err2 != nil {
  95. return
  96. }
  97. if math.Ceil(curperiodFl/3) == 1 {
  98. jd = 1
  99. i = 1
  100. jccyrs = A200000.Qccyrs1
  101. jmcyrs = A200000.Qmcyrs1
  102. jczcze = A200000.Qczcze1
  103. jmzcze = A200000.Qmzcze1
  104. }
  105. if math.Ceil(curperiodFl/3) == 2 {
  106. jd = 2
  107. i = 3
  108. jccyrs = A200000.Qccyrs2
  109. jmcyrs = A200000.Qmcyrs2
  110. jczcze = A200000.Qczcze2
  111. jmzcze = A200000.Qmzcze2
  112. }
  113. if math.Ceil(curperiodFl/3) == 3 {
  114. jd = 3
  115. i = 5
  116. jccyrs = A200000.Qccyrs3
  117. jmcyrs = A200000.Qmcyrs3
  118. jczcze = A200000.Qczcze3
  119. jmzcze = A200000.Qmzcze3
  120. }
  121. if math.Ceil(curperiodFl/3) == 4 {
  122. jd = 4
  123. i = 7
  124. jccyrs = A200000.Qccyrs4
  125. jmcyrs = A200000.Qmcyrs4
  126. jczcze = A200000.Qczcze4
  127. jmzcze = A200000.Qmzcze4
  128. }
  129. fmt.Println(jd)
  130. var arr []string
  131. if common.StrToFloat(jczcze) <= 0 {
  132. arr = append(arr, `季初资产总额必须大于0`)
  133. }
  134. if common.StrToFloat(jmzcze) <= 0 {
  135. arr = append(arr, `季末资产总额必须大于0`)
  136. }
  137. if common.StrToFloat(jccyrs) <= 0 {
  138. arr = append(arr, `季初从业人数必须大于0`)
  139. }
  140. if common.StrToFloat(jmcyrs) <= 0 {
  141. arr = append(arr, `季末从业人数必须大于0`)
  142. }
  143. if len(arr) != 0 {
  144. panic(taxerr.NewUserV3(strings.Join(arr, `;`), "请核实后重试"))
  145. }
  146. //
  147. common.Input(newp, `(//td[contains(text(), "从业人数")]/..//input)[`+common.IntToStr(i)+`]`, jccyrs)
  148. common.Input(newp, `(//td[contains(text(), "从业人数")]/..//input)[`+common.IntToStr(i+1)+`]`, jmcyrs)
  149. common.Input(newp, `(//td[contains(text(), "资产总额(万元)")]/..//input)[`+common.IntToStr(i)+`]`, jczcze)
  150. common.Input(newp, `(//td[contains(text(), "资产总额(万元)")]/..//input)[`+common.IntToStr(i+1)+`]`, jmzcze)
  151. //失去焦距后后会有弹窗
  152. newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame().MustElementX(`//td[contains(text(), "从业人数")]`).MustClick()
  153. utils.Sleep(1)
  154. if common.MustHas(newp, `//div[text()="您申报的资产总额同资产负债表数据不一致,请确认填报的单位是否为万元,数据填报是否准确。"]`) {
  155. common.MustElementX(newp, `//div[text()="您申报的资产总额同资产负债表数据不一致,请确认填报的单位是否为万元,数据填报是否准确。"]/..//button/span`).MustClick()
  156. utils.Sleep(2)
  157. }
  158. //资产总额填报单位是万元,币种为人民币。请您确认填写的是否正确
  159. if newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustHas(`div[class="layui-layer-title"]`) {
  160. //
  161. newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`a[class="layui-layer-btn0"]`).MustClick()
  162. }
  163. if A200000.Xzhy == 1 { //1是0否 是否限制行业
  164. wait1 := newp.MustWaitRequestIdle()
  165. newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame().MustElement(`#viewCtrlId > div:nth-child(8) > table:nth-child(2) > tbody > tr:nth-child(6) > td.edit.left > label:nth-child(1) > input`).MustClick()
  166. wait1()
  167. if newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustHasR(`#layui-layer2 > div.layui-layer-btn.layui-layer-btn- > a.layui-layer-btn0`, "确定") {
  168. newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#layui-layer2 > div.layui-layer-btn.layui-layer-btn- > a.layui-layer-btn0`).MustClick()
  169. }
  170. }
  171. common.Input(newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame(), `//td[contains(text(), "营业收入")]/..//input`, A200000.Yysr)
  172. common.Input(newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame(), `//td[contains(text(), "营业成本")]/..//input`, A200000.Yycb)
  173. common.Input(newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame(), `//td[contains(text(), "利润总额")]/..//input`, A200000.Lrze)
  174. common.Input(newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame(), `//td[contains(text(), "加:特定业务计算的应纳税所得额")]/..//input`, A200000.Tdywjsdynssde)
  175. common.Input(newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame(), `//td[contains(text(), "减:不征税收入")]/..//input`, A200000.Bzssr)
  176. //a7
  177. var g int
  178. for _, v1 := range a7 {
  179. if v1.Status == 1 {
  180. g = 1
  181. break
  182. }
  183. }
  184. if g == 1 {
  185. wait3 := newp.MustWaitRequestIdle()
  186. //填写优惠事项
  187. newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame().MustElementX(`(//a[contains(text(), "减:免税收入、减计收入、加计扣除")]/..//a)[2]`).MustClick()
  188. wait3()
  189. for kk := range a7 {
  190. if a7[kk].Code != "" {
  191. if has, el, _ := newp.HasX(fmt.Sprintf("(//td[contains(text(),'%s')]/../td/input)[2]", a7[kk].Code)); has {
  192. inputStr(el, a7[kk].Amount)
  193. }
  194. }
  195. } //确认 保存
  196. MustElementX(newp, `//a[contains(text(),"确定")]`).MustClick()
  197. }
  198. //a8
  199. g1 := false
  200. for _, vv := range a8 {
  201. if vv.Status == 1 {
  202. g1 = true
  203. break
  204. }
  205. }
  206. //g1 = true
  207. if g1 {
  208. wait5 := newp.MustWaitRequestIdle()
  209. newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame().MustElementX(`(//a[contains(text(), "减:所得减免")]/..//a)[2]`).MustClick()
  210. wait5()
  211. for kk := range a8 {
  212. if a8[kk].Code != "" {
  213. if has, el, _ := newp.HasX(fmt.Sprintf("(//td[contains(text(),'%s')]/..//input)[2]", a8[kk].Code)); has {
  214. inputStr(el, a8[kk].Amount)
  215. }
  216. }
  217. }
  218. //确认 保存
  219. newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame().MustElementX(`//a[contains(text(),"确定")]`).MustClick()
  220. }
  221. //数据对比 //弥补以前年度亏损
  222. sjmbyqndks := newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame().MustElementX(`//td[contains(text(), "减:弥补以前年度亏损")]/..//input`).MustText()
  223. if common.StrToFloat(sjmbyqndks) != common.StrToFloat(A200000.Mbyqndks) { //弥补以前年度亏损
  224. panic(taxerr.NewUserV3(`弥补以前年度亏损税局为`+sjmbyqndks, "请核实后重试"))
  225. }
  226. //第10行大于0 再填写13行优惠事项
  227. mustText10 := newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame().MustElementX(`(//td[contains(text(), "实际利润额")]/..//input)[1]`).MustText()
  228. if common.StrToFloat(mustText10) > 0 {
  229. //填写优惠事项
  230. wait13 := newp.MustWaitRequestIdle()
  231. newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame().MustElementX(`(//a[contains(text(), "减:减免所得税额")]/..//a)[2]`).MustClick()
  232. utils.Sleep(1)
  233. wait13()
  234. for kk := range a13 {
  235. if common.StrToFloat(a13[kk].Amount) > 0 && a13[kk].Code == "JMSE99999" { //只有其他能填
  236. if has, el, _ := newp.HasX(`(//td[contains(text(), "JMSE99999")]/..//input)[2]`); has {
  237. inputStr(el, a13[kk].Amount)
  238. }
  239. //newp.MustElementX("(//td[contains(text()," + a13[kk].Code + ")]/..//input)[2]").MustInput(a13[kk].Amount)
  240. }
  241. }
  242. // 保存
  243. newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`#frmSheet`).MustFrame().MustElementX(`//a[contains(text(),"确定")]`).MustClick()
  244. }
  245. //报表列表
  246. if newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustHas(`body > div.TableMain > table > tbody > tr > td.biao_leftmenu > div > table > tbody > tr > td.dropdownBtn > span > i`) {
  247. newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`body > div.TableMain > table > tbody > tr > td.biao_leftmenu > div > table > tbody > tr > td.dropdownBtn > span > i`).MustClick()
  248. }
  249. utils.Sleep(1)
  250. //点击
  251. newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElementX(`//a[@title="《A201020固定资产加速折旧(扣除)优惠明细表》"]`).MustClick()
  252. utils.Sleep(2)
  253. //提交申报
  254. newp.Timeout(common.ClickTimeOut).MustElement(`#page-content > div > section > main > div > div > div > div.gt-layout-footerbar > div > div > div > div > div > div.fxgt-wrap-submitfooter-right > div > div:nth-child(2) > button > span`).MustClick()
  255. //如果有错误
  256. if newp.MustHas(`body > section > section > section > main > div > div > div > div > div.gt-layout-footerbar > div > div.gov-validate-dialog > div > div.gov-validate-dialog-content > ul > li > span`) {
  257. text := newp.MustElement(`body > section > section > section > main > div > div > div > div > div.gt-layout-footerbar > div > div.gov-validate-dialog > div > div.gov-validate-dialog-content > ul > li > span`).MustText()
  258. panic(taxerr.NewUserV3(text, "请核实后重试"))
  259. }
  260. if newp.MustHasX(`//div[@class="t-dialog__body t-dialog__body__icon"]`) {
  261. text := newp.MustElementX(`//div[@class="t-dialog__body t-dialog__body__icon"]`).MustText()
  262. if strings.Contains(text, "不符") {
  263. panic(taxerr.NewUserV3(text, "请核实后重试"))
  264. }
  265. }
  266. if newp.MustHasX(`//div[@class="drawer-body"]//li`) && newp.MustElementX(`//div[@class="drawer-body"]//li`).MustVisible() {
  267. elementsX := newp.MustElementsX(`//div[@class="drawer-body"]//li`)
  268. text := ""
  269. for _, e := range elementsX {
  270. text += e.MustElement(`p`).MustText()
  271. }
  272. panic(taxerr.NewUserV3(text, "请核实后重试"))
  273. }
  274. utils.Sleep(3)
  275. if newp.MustHasX(`//span[text()="核实无误,提交申报"]`) {
  276. MustElementX(newp, `//span[text()="核实无误,提交申报"]`).MustClick()
  277. }
  278. //确认 提交申报
  279. //if newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustHas(`//div[text()="提示"]`) {
  280. //}
  281. MustElementX(newp, `//a[contains(text(),"提交申报")]`).MustClick()
  282. //newp.Timeout(common.ClickTimeOut).MustElement(`#frmFrame`).MustFrame().MustElement(`#frmMain`).MustFrame().MustElement(`//a[contains(text(),"提交申报")]`).MustClick()
  283. utils.Sleep(3)
  284. newp.Timeout(common.ClickTimeOut).MustElementX(`//input[@placeholder='真']`).MustClick()
  285. newp.Timeout(common.ClickTimeOut).MustElementX(`//input[@placeholder='真']`).MustInput("真")
  286. newp.Timeout(common.ClickTimeOut).MustElementX(`//input[@placeholder='实']`).MustClick()
  287. newp.Timeout(common.ClickTimeOut).MustElementX(`//input[@placeholder='实']`).MustInput("实")
  288. newp.Timeout(common.ClickTimeOut).MustElementX(`//input[@placeholder='责']`).MustClick()
  289. newp.Timeout(common.ClickTimeOut).MustElementX(`//input[@placeholder='责']`).MustInput("责")
  290. newp.Timeout(common.ClickTimeOut).MustElementX(`//input[@placeholder='任']`).MustClick()
  291. newp.Timeout(common.ClickTimeOut).MustElementX(`//input[@placeholder='任']`).MustInput("任")
  292. newp.Timeout(common.ClickTimeOut).MustElementX(`//span[contains(text(),"确定")]`).MustClick()
  293. text := newp.Timeout(10 * common.ClickTimeOut).MustElementX(`//div[@class="gt-result-title"]`).MustText()
  294. path := SaveErrImg(newp, info)
  295. task.Result.BusinessImg = path
  296. task.Result.BusinessLog = text
  297. })
  298. if err != nil {
  299. task.Result.BusinessStatus = variable.TaxFail
  300. task.Result.BusinessLog = common.HandleError(ctx, err).Error()
  301. return
  302. }
  303. }
  304. func checkQysds20000(page *rod.Page, A200000 sb.GsTaxQuarter, curperiodFl float64) error {
  305. jd := math.Ceil(curperiodFl / 3)
  306. errMsg := ""
  307. for i := 0; i < 5; i++ {
  308. x := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[1]`)
  309. readonly := x.MustAttribute("readonly")
  310. if readonly == nil && x.MustText() == "" {
  311. time.Sleep(5 * time.Second)
  312. } else {
  313. break
  314. }
  315. }
  316. if jd > 1 && MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[1]`).MustAttribute("readonly") == nil {
  317. jccyrs := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[1]`).MustText()
  318. if common.StrToFloat(jccyrs) != common.StrToFloat(A200000.Qccyrs1) {
  319. errMsg += fmt.Sprintf("一季度季初从业人数[%s]与系统[%s]不符 , ", jccyrs, A200000.Qccyrs1)
  320. }
  321. jmcyrs := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[2]`).MustText()
  322. if common.StrToFloat(jmcyrs) != common.StrToFloat(A200000.Qmcyrs1) {
  323. errMsg += fmt.Sprintf("一季度季末从业人数[%s]与系统[%s]不符 , ", jmcyrs, A200000.Qmcyrs1)
  324. }
  325. jczcze := MustElementX(page, `(//td[contains(text(), "资产总额(万元)")]/..//input)[1]`).MustText()
  326. if common.StrToFloat(jczcze) != common.StrToFloat(A200000.Qczcze1) {
  327. errMsg += fmt.Sprintf("一季度季初资产总额(万元)[%s]与系统[%s]不符 , ", jczcze, A200000.Qczcze1)
  328. }
  329. jmzcze := MustElementX(page, `(//td[contains(text(), "资产总额(万元)")]/..//input)[2]`).MustText()
  330. if common.StrToFloat(jmzcze) != common.StrToFloat(A200000.Qmzcze1) {
  331. errMsg += fmt.Sprintf("一季度季末资产总额(万元)[%s]与系统[%s]不符 , ", jmzcze, A200000.Qmzcze1)
  332. }
  333. }
  334. if jd == 2 {
  335. jccyrs := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[3]`).MustText()
  336. if common.StrToInt(jccyrs) != 0 && common.StrToFloat(jccyrs) != common.StrToFloat(A200000.Qccyrs2) {
  337. errMsg += fmt.Sprintf("一季度季末从业人数[%s]与系统二季度季初从业人数[%s]不符 , ", jccyrs, A200000.Qccyrs2)
  338. }
  339. jmzcze := MustElementX(page, `(//td[contains(text(), "资产总额(万元)")]/..//input)[2]`).MustText()
  340. if common.StrToInt(jmzcze) != 0 && common.StrToFloat(jmzcze) != common.StrToFloat(A200000.Qczcze2) {
  341. errMsg += fmt.Sprintf("一季度季末资产总额(万元)[%s]与系统二季度季初资产总额(万元)[%s]不符 , ", jmzcze, A200000.Qczcze2)
  342. }
  343. }
  344. if jd > 2 && MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[3]`).MustAttribute("readonly") == nil {
  345. jccyrs := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[3]`).MustText()
  346. if common.StrToFloat(jccyrs) != common.StrToFloat(A200000.Qccyrs2) {
  347. errMsg += fmt.Sprintf("二季度季初从业人数[%s]与系统[%s]不符 , ", jccyrs, A200000.Qccyrs2)
  348. }
  349. jmcyrs := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[4]`).MustText()
  350. if common.StrToFloat(jmcyrs) != common.StrToFloat(A200000.Qmcyrs2) {
  351. errMsg += fmt.Sprintf("二季度季末从业人数[%s]与系统[%s]不符 , ", jmcyrs, A200000.Qmcyrs2)
  352. }
  353. jczcze := MustElementX(page, `(//td[contains(text(), "资产总额(万元)")]/..//input)[3]`).MustText()
  354. if common.StrToFloat(jczcze) != common.StrToFloat(A200000.Qczcze2) {
  355. errMsg += fmt.Sprintf("二季度季初资产总额(万元)[%s]与系统[%s]不符 , ", jczcze, A200000.Qczcze2)
  356. }
  357. jmzcze := MustElementX(page, `(//td[contains(text(), "资产总额(万元)")]/..//input)[4]`).MustText()
  358. if common.StrToFloat(jmzcze) != common.StrToFloat(A200000.Qmzcze2) {
  359. errMsg += fmt.Sprintf("二季度季末资产总额(万元)[%s]与系统[%s]不符 , ", jmzcze, A200000.Qmzcze2)
  360. }
  361. }
  362. if jd == 3 {
  363. jmcyrs := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[4]`).MustText()
  364. if common.StrToInt(jmcyrs) != 0 && common.StrToFloat(jmcyrs) != common.StrToFloat(A200000.Qccyrs3) {
  365. errMsg += fmt.Sprintf("二季度季末从业人数[%s]与系统三季度季初从业人数[%s]不符 , ", jmcyrs, A200000.Qccyrs3)
  366. }
  367. jmzcze := MustElementX(page, `(//td[contains(text(), "资产总额(万元)")]/..//input)[4]`).MustText()
  368. if common.StrToInt(jmzcze) != 0 && common.StrToFloat(jmzcze) != common.StrToFloat(A200000.Qczcze3) {
  369. errMsg += fmt.Sprintf("二季度季末资产总额(万元)[%s]与系统三季度季初资产总额(万元)[%s]不符 , ", jmzcze, A200000.Qczcze3)
  370. }
  371. }
  372. if jd > 3 && MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[5]`).MustAttribute("readonly") == nil {
  373. jccyrs := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[5]`).MustText()
  374. if common.StrToFloat(jccyrs) != common.StrToFloat(A200000.Qccyrs3) {
  375. errMsg += fmt.Sprintf("三季度季初从业人数[%s]与系统[%s]不符 , ", jccyrs, A200000.Qccyrs3)
  376. }
  377. jmcyrs := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[6]`).MustText()
  378. if common.StrToFloat(jmcyrs) != common.StrToFloat(A200000.Qmcyrs3) {
  379. errMsg += fmt.Sprintf("三季度季末从业人数[%s]与系统[%s]不符 , ", jmcyrs, A200000.Qmcyrs3)
  380. }
  381. jczcze := MustElementX(page, `(//td[contains(text(), "资产总额(万元)")]/..//input)[5]`).MustText()
  382. if common.StrToFloat(jczcze) != common.StrToFloat(A200000.Qczcze3) {
  383. errMsg += fmt.Sprintf("三季度季初资产总额(万元)[%s]与系统[%s]不符 , ", jczcze, A200000.Qczcze3)
  384. }
  385. jmzcze := MustElementX(page, `(//td[contains(text(), "资产总额(万元)")]/..//input)[6]`).MustText()
  386. if common.StrToFloat(jmzcze) != common.StrToFloat(A200000.Qmzcze3) {
  387. errMsg += fmt.Sprintf("三季度季末资产总额(万元)[%s]与系统[%s]不符 , ", jmzcze, A200000.Qmzcze3)
  388. }
  389. }
  390. if jd == 4 {
  391. jmcyrs := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[6]`).MustText()
  392. if common.StrToInt(jmcyrs) != 0 && common.StrToFloat(jmcyrs) != common.StrToFloat(A200000.Qccyrs4) {
  393. errMsg += fmt.Sprintf("三季度季末从业人数[%s]与系统四季度季初从业人数[%s]不符 , ", jmcyrs, A200000.Qccyrs4)
  394. }
  395. jmzcze := MustElementX(page, `(//td[contains(text(), "资产总额(万元)")]/..//input)[6]`).MustText()
  396. if common.StrToInt(jmzcze) != 0 && common.StrToFloat(jmzcze) != common.StrToFloat(A200000.Qczcze4) {
  397. errMsg += fmt.Sprintf("三季度季末资产总额(万元)[%s]与系统四季度季初资产总额(万元)[%s]不符 , ", jmzcze, A200000.Qczcze4)
  398. }
  399. }
  400. if jd > 4 {
  401. jccyrs := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[7]`).MustText()
  402. if common.StrToFloat(jccyrs) != common.StrToFloat(A200000.Qccyrs4) {
  403. errMsg += fmt.Sprintf("四季度季初从业人数[%s]与系统[%s]不符 , ", jccyrs, A200000.Qccyrs4)
  404. }
  405. jmcyrs := MustElementX(page, `(//td[contains(text(), "从业人数")]/..//input)[8]`).MustText()
  406. if common.StrToFloat(jmcyrs) != common.StrToFloat(A200000.Qmcyrs4) {
  407. errMsg += fmt.Sprintf("四季度季末从业人数[%s]与系统[%s]不符 , ", jmcyrs, A200000.Qmcyrs4)
  408. }
  409. jczcze := MustElementX(page, `(//td[contains(text(), "资产总额(万元)")]/..//input)[7]`).MustText()
  410. if common.StrToFloat(jczcze) != common.StrToFloat(A200000.Qczcze4) {
  411. errMsg += fmt.Sprintf("四季度季初资产总额(万元)[%s]与系统[%s]不符 , ", jczcze, A200000.Qczcze4)
  412. }
  413. jmzcze := MustElementX(page, `(//td[contains(text(), "资产总额(万元)")]/..//input)[8]`).MustText()
  414. if common.StrToFloat(jmzcze) != common.StrToFloat(A200000.Qmzcze4) {
  415. errMsg += fmt.Sprintf("四季度季末资产总额(万元)[%s]与系统[%s]不符 , ", jmzcze, A200000.Qmzcze4)
  416. }
  417. }
  418. if errMsg != "" {
  419. return taxerr.NewUserV3("季报数据不一致: "+errMsg, "请核实后重试")
  420. }
  421. return nil
  422. }