123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569 |
- package CheckYbjc
- import (
- "fmt"
- "git.listensoft.net/tool/jspkit/common"
- "git.listensoft.net/tool/jspkit/common/models/sb"
- "git.listensoft.net/tool/jspkit/common/variable"
- "git.listensoft.net/tool/jspkit/logger"
- "git.listensoft.net/tool/jspkit/taxerr"
- "reflect"
- "strings"
- )
- func CheckVatByYbjc(Data string, vat []sb.GsVat, fb1 []sb.GsVatAttach1, fb2 []sb.GsVatAttach2, fb3 []sb.GsVatAttach3, fb4 []sb.GsVatAttach4, fb5 []sb.GsVatAttach5, jm []sb.GsVatJsxm) (status int, editTable string, errLog string) {
- vats := []sb.GsVat{}
- common.GetData(variable.GsVat, Data, &vats)
- var attach1s []sb.GsVatAttach1
- common.GetData(variable.GsVatAttach1, Data, &attach1s)
- var attach2s []sb.GsVatAttach2
- common.GetData(variable.GsVatAttach2, Data, &attach2s)
- var attach3s []sb.GsVatAttach3
- common.GetData(variable.GsVatAttach3, Data, &attach3s)
- var attach4s []sb.GsVatAttach4
- common.GetData(variable.GsVatAttach4, Data, &attach4s)
- var vatfjs []sb.GsVatAttach5
- common.GetData(variable.GsVatAttach5, Data, &vatfjs)
- if len(vatfjs) != 3 {
- panic(taxerr.NewUser("附加税生成错误!"))
- }
- var gs_vat_qt sb.GsVatQt
- common.GetData(variable.GsVatQt, Data, &gs_vat_qt)
- var gsVatJsxm []sb.GsVatJsxm
- common.GetData(variable.GsVatJsxm, Data, &gsVatJsxm)
- var jsxm []sb.GsVatJsxm
- for _, v := range gsVatJsxm {
- if v.Type == 1 && (common.StrToFloat(v.Qcye) != 0 || common.StrToFloat(v.Qmye) != 0 || common.StrToFloat(v.Bqfse) != 0 || common.StrToFloat(v.Bqydjse) != 0 || common.StrToFloat(v.Bqsjdjse) != 0) {
- jsxm = append(jsxm, v)
- }
- }
- var ckms []sb.GsVatJsxm
- for _, v := range gsVatJsxm {
- if v.Type == 2 {
- ckms = append(ckms, v)
- break
- }
- }
- var kjfw []sb.GsVatJsxm
- for _, v := range gsVatJsxm {
- if v.Type == 3 {
- kjfw = append(kjfw, v)
- break
- }
- }
- var msxm []sb.GsVatJsxm
- for _, v := range gsVatJsxm {
- if v.Type == 4 && (common.StrToFloat(v.Qcye) != 0 || common.StrToFloat(v.Qmye) != 0 || common.StrToFloat(v.Bqfse) != 0 || common.StrToFloat(v.Bqydjse) != 0 || common.StrToFloat(v.Bqsjdjse) != 0) {
- msxm = append(msxm, v)
- }
- }
- {
- }
- return 1, "", ""
- }
- func CheckWpsrLost(vat []sb.GsVat, baseVat []sb.GsVat, attach1 []sb.GsVatAttach1) bool {
-
- Check1 := false
- for _, v := range attach1 {
- if common.StrToFloat(v.WkjfpXxynse) != 0 || common.StrToFloat(v.WkjfpXse) != 0 {
- logger.Info(`当前企业含有负数未开具发票,系统附表一数据:`, v.WkjfpXse, v.WkjfpXxynse)
- Check1 = true
- break
- }
- }
-
- Check2 := false
- if common.StrToFloat(baseVat[0].Xxse) < common.StrToFloat(vat[0].Xxse) {
- Check2 = true
- }
- Check3 := true
-
- {
- if common.StrToFloat(vat[0].Jxse) > common.StrToFloat(baseVat[0].Jxse) {
- Check3 = false
- }
- if common.StrToFloat(vat[0].Sqldse) != common.StrToFloat(baseVat[0].Sqldse) {
- Check3 = false
- }
- if common.StrToFloat(vat[0].Qcwjse) != common.StrToFloat(baseVat[0].Qcwjse) {
- Check3 = false
- }
- }
- if Check1 && Check2 && Check3 {
- logger.Info("当前企业含有负数未开具发票:主表数据", baseVat[0].Xxse, vat[0].Xxse)
- return true
- }
- return false
- }
- func CheckVat(vat []sb.GsVat, baseVat []sb.GsVat) (status int, errLog string) {
- status = 1
- var errLogs []string
-
- {
- i := 0
- var Prefix = ""
- switch i {
- case 0:
- Prefix = "一般纳税人主表-一般项目本月数-"
- case 1:
- Prefix = "一般纳税人主表-一般项目本年累计-"
- case 2:
- Prefix = "一般纳税人主表-即征即退项目本月数-"
- case 3:
- Prefix = "一般纳税人主表-即征即退项目本年累计-"
- }
-
-
-
- if common.StrToFloat(baseVat[i].Xxse) < common.StrToFloat(vat[i].Xxse) {
- errLogs = append(errLogs, MakeMsg(Prefix+"销项税额", vat[i].Xxse, baseVat[i].Xxse))
- }
- if common.StrToFloat(vat[i].Jxse) > common.StrToFloat(baseVat[i].Jxse) {
- errLogs = append(errLogs, MakeMsg(Prefix+"进项税额", vat[i].Jxse, baseVat[i].Jxse))
- }
- if common.StrToFloat(vat[0].Sqldse) != common.StrToFloat(baseVat[0].Sqldse) {
- errLogs = append(errLogs, MakeMsg("一般纳税人主表一 一般项目本月数-上期留抵税额", vat[0].Sqldse, baseVat[0].Sqldse))
- }
- if common.StrToFloat(vat[0].Qcwjse) != common.StrToFloat(baseVat[0].Qcwjse) {
- errLogs = append(errLogs, MakeMsg("一般纳税人主表一 一般项目本月数-期初未缴税额", vat[0].Qcwjse, baseVat[0].Qcwjse))
- }
-
-
-
-
- if len(errLogs) > 0 {
- return 3, strings.Join(errLogs, ",")
- }
- }
- for i := 0; i < 4; i++ {
-
- {
- var KeyName = []string{
- "Asysljsxse",
- "Yshwxse",
- "Yslwxse",
- "Xxse",
- "Jxse",
-
- "Ynsehj",
-
- "Qmwjse",
- "Bqybtse",
- "Cjs",
- "Jyf",
- "Dfjyf",
- }
- v1 := reflect.ValueOf(vat[0])
- v2 := reflect.ValueOf(baseVat[0])
- for _, v := range KeyName {
- if common.StrToFloat(v1.FieldByName(v).String()) != common.StrToFloat(v2.FieldByName(v).String()) {
- logger.Info("主表对比不通过:" + v)
- status = 2
- break
- }
- }
- }
- }
- if len(errLogs) > 0 {
- status = 3
- errLog = strings.Join(errLogs, ",")
- }
- return status, errLog
- }
- func CheckAttach1(fb1 []sb.GsVatAttach1, attach1 []sb.GsVatAttach1) (status int, errLog string) {
- status = 1
- var errLogs []string
- attach1[0].Jshj = "0"
-
- {
- var KeyName = []string{
- "KjskzzszyfpXse",
- "KjskzzszyfpXxynse",
- "WkjfpXse",
- "WkjfpXxynse",
- "KjqtfpXse",
- "KjqtfpXxynse",
- "Nsjctzdxse",
- "NsjctzXxynse",
- }
- for i := range attach1 {
- r1 := reflect.ValueOf(fb1[i])
- r2 := reflect.ValueOf(attach1[i])
- for _, key_name := range KeyName {
- if common.StrToFloat(r1.FieldByName(key_name).String()) != common.StrToFloat(r2.FieldByName(key_name).String()) {
- status = 2
- break
- }
- }
- }
- if common.StrToFloat(fb1[0].Xse) != common.StrToFloat(attach1[0].Xse) {
- if status != 2 {
- status = 2
- }
- }
- if common.StrToFloat(fb1[0].HjXxynse) != common.StrToFloat(attach1[0].HjXxynse) {
- if status != 2 {
- status = 2
- }
- }
- }
- if len(errLogs) > 0 {
- status = 3
- errLog = strings.Join(errLogs, ",")
- }
- return status, errLog
- }
- func CheckAttach2(fb2 []sb.GsVatAttach2, attach2 []sb.GsVatAttach2) (status int, errLog string) {
- status = 1
- var errLogs []string
-
- {
-
- if common.StrToFloat(fb2[24].Je) != common.StrToFloat(attach2[24].Je) {
- errLogs = append(errLogs, fmt.Sprintf("附表二:期初已认证相符但未申报抵扣金额不一致:税局为%s系统为%s", fb2[24].Je, attach2[24].Je))
- }
- for i := range attach2 {
-
- r1 := reflect.ValueOf(fb2[i])
- r2 := reflect.ValueOf(attach2[i])
- if i == 0 || i == 1 || i == 5 || i == 34 {
- for _, key_name := range []string{"Fs", "Je", "Se"} {
- if common.StrToFloat(r1.FieldByName(key_name).String()) != common.StrToFloat(r2.FieldByName(key_name).String()) {
- status = 2
- break
- }
- }
- }
- if status == 2 {
- break
- }
- if i > 11 && i < 23 {
- if common.StrToFloat(r1.FieldByName("Se").String()) != common.StrToFloat(r2.FieldByName("Se").String()) {
- status = 2
- break
- }
- }
- if status == 2 {
- break
- }
- }
- }
- if len(errLogs) > 0 {
- status = 3
- errLog = strings.Join(errLogs, ",")
- }
- return status, errLog
- }
- func CheckAttach3Cq(fb3 []sb.GsVatAttach3, attach3 []sb.GsVatAttach3) (status int, errLog string) {
-
-
- status = 1
- var errLogs []string
-
- {
- for i := 0; i < len(attach3); i++ {
- status1 := ForeachStruct(fb3[i], attach3[i])
- if status != 2 {
- status = status1
- }
- }
- }
- if len(errLogs) > 0 {
- status = 3
- errLog = strings.Join(errLogs, ",")
- }
- return status, errLog
- }
- func CheckAttach3(fb3 []sb.GsVatAttach3, attach3 []sb.GsVatAttach3) (status int, errLog string) {
-
- return 1, ""
- status = 1
- var errLogs []string
-
- {
- for i := 0; i < len(attach3); i++ {
- status1 := ForeachStruct(fb3[i], attach3[i])
- if status != 2 {
- status = status1
- }
- }
- }
- if len(errLogs) > 0 {
- status = 3
- errLog = strings.Join(errLogs, ",")
- }
- return status, errLog
- }
- func CheckAttach4(fb4 []sb.GsVatAttach4, attach4 []sb.GsVatAttach4) (status int, errLog string) {
- status = 1
- var errLogs []string
-
- {
- var KeyName = []string{
- "Bqsjdjse",
- "Bqfse",
- "Bqsjjjdkjxse",
- "Bqkjjdkjxse",
- "Qcye",
- }
- for i := 0; i < len(attach4); i++ {
- r1 := reflect.ValueOf(fb4[i])
- r2 := reflect.ValueOf(attach4[i])
- for _, key_name := range KeyName {
- if common.StrToFloat(r1.FieldByName(key_name).String()) != common.StrToFloat(r2.FieldByName(key_name).String()) {
- status = 2
- break
- }
- }
- }
- }
- if len(errLogs) > 0 {
- status = 3
- errLog = strings.Join(errLogs, ",")
- }
- return status, errLog
- }
- func CheckAttach5(fb5 []sb.GsVatAttach5, attach5 []sb.GsVatAttach5) (status int, errLog string) {
- status = 1
-
- {
- var KeyNAme = []string{
- "Zzsse",
- "Ldtsbqkce",
- "Bqybtse",
- }
- for _, v1 := range attach5 {
- for _, v2 := range fb5 {
- if v1.ZsxmDm == v2.ZsxmDm {
- r1 := reflect.ValueOf(v1)
- r2 := reflect.ValueOf(v2)
- for _, key_name := range KeyNAme {
- if common.StrToFloat(r1.FieldByName(key_name).String()) != common.StrToFloat(r2.FieldByName(key_name).String()) {
- status = 2
- break
- }
- }
- if status == 2 {
- break
- }
- }
- }
- if status == 2 {
- break
- }
- }
- }
- var errLogs []string
- if len(errLogs) > 0 {
- status = 3
- errLog = strings.Join(errLogs, ",")
- }
- return status, errLog
- }
- func CheckJm(jm []sb.GsVatJsxm, Jm []sb.GsVatJsxm) (status int, errLog string) {
- status = 1
- var errLogs []string
- var jsxm1 []sb.GsVatJsxm
- for _, v := range jm {
- if v.Type == 1 && (common.StrToFloat(v.Qcye) != 0 || common.StrToFloat(v.Qmye) != 0 || common.StrToFloat(v.Bqfse) != 0 || common.StrToFloat(v.Bqydjse) != 0 || common.StrToFloat(v.Bqsjdjse) != 0) {
- jsxm1 = append(jsxm1, v)
- }
- }
- var ckms1 []sb.GsVatJsxm
- for _, v := range jm {
- if v.Type == 2 {
- ckms1 = append(ckms1, v)
- break
- }
- }
- var kjfw1 []sb.GsVatJsxm
- for _, v := range jm {
- if v.Type == 3 {
- kjfw1 = append(kjfw1, v)
- break
- }
- }
- var msxm1 []sb.GsVatJsxm
- for _, v := range jm {
- if v.Type == 4 && (common.StrToFloat(v.Qcye) != 0 || common.StrToFloat(v.Qmye) != 0 || common.StrToFloat(v.Bqfse) != 0 || common.StrToFloat(v.Bqydjse) != 0 || common.StrToFloat(v.Bqsjdjse) != 0) {
- msxm1 = append(msxm1, v)
- }
- }
- var jsxm2 []sb.GsVatJsxm
- for _, v := range Jm {
- if v.Type == 1 && (common.StrToFloat(v.Qcye) != 0 || common.StrToFloat(v.Qmye) != 0 || common.StrToFloat(v.Bqfse) != 0 || common.StrToFloat(v.Bqydjse) != 0 || common.StrToFloat(v.Bqsjdjse) != 0) {
- jsxm2 = append(jsxm2, v)
- }
- }
- var ckms2 []sb.GsVatJsxm
- for _, v := range Jm {
- if v.Type == 2 {
- ckms2 = append(ckms2, v)
- break
- }
- }
- var kjfw2 []sb.GsVatJsxm
- for _, v := range Jm {
- if v.Type == 3 {
- kjfw2 = append(kjfw2, v)
- break
- }
- }
- var msxm2 []sb.GsVatJsxm
- for _, v := range Jm {
- if v.Type == 4 && (common.StrToFloat(v.Qcye) != 0 || common.StrToFloat(v.Qmye) != 0 || common.StrToFloat(v.Bqfse) != 0 || common.StrToFloat(v.Bqydjse) != 0 || common.StrToFloat(v.Bqsjdjse) != 0) {
- msxm2 = append(msxm2, v)
- }
- }
-
- {
-
- if len(jsxm1) != len(jsxm2) {
- status = 2
-
- }
- for _, v1 := range jsxm1 {
- find := false
- for _, v2 := range jsxm2 {
- if v1.SbJmxzdmJmHm == v2.SbJmxzdmJmHm {
- find = true
- if common.StrToFloat(v1.Qcye) == common.StrToFloat(v2.Qcye) && common.StrToFloat(v1.Qmye) == common.StrToFloat(v2.Qmye) && common.StrToFloat(v1.Bqfse) == common.StrToFloat(v2.Bqfse) && common.StrToFloat(v1.Bqydjse) == common.StrToFloat(v2.Bqydjse) {
- status = 1
- } else {
- status = 2
- }
- break
- }
- }
- if !find {
- status = 2
-
- }
- }
-
- if common.StrToFloat(ckms1[0].Qcye) != common.StrToFloat(ckms2[0].Qcye) {
- status = 2
- }
-
- if (len(kjfw1) == len(kjfw2)) && len(kjfw1) > 0 && len(kjfw2) > 0 {
- if common.StrToFloat(kjfw1[0].Qcye) != common.StrToFloat(kjfw2[0].Qcye) {
- status = 2
- }
- }
-
- if len(msxm1) != len(msxm2) {
- status = 2
-
- }
- for _, v1 := range msxm1 {
- find := false
- for _, v2 := range msxm2 {
- if v1.SbJmxzdmJmHm == v2.SbJmxzdmJmHm {
- find = true
- if common.StrToFloat(v1.Qcye) == common.StrToFloat(v2.Qcye) && common.StrToFloat(v1.Qmye) == common.StrToFloat(v2.Qmye) && common.StrToFloat(v1.Bqfse) == common.StrToFloat(v2.Bqfse) && common.StrToFloat(v1.Bqydjse) == common.StrToFloat(v2.Bqydjse) {
- if status != 2 {
- status = 1
- }
- } else {
- status = 2
- }
- break
- }
- }
- if !find {
- status = 2
-
- }
- }
- }
- if len(errLogs) > 0 {
- status = 3
- errLog = strings.Join(errLogs, ",")
- }
- return status, errLog
- }
- func ForeachStruct(obj1 interface{}, obj2 interface{}) (status int) {
- status = 1
- t1 := reflect.TypeOf(obj1)
- v1 := reflect.ValueOf(obj1)
- t2 := reflect.TypeOf(obj2)
- v2 := reflect.ValueOf(obj2)
- for k := 0; k < t1.NumField(); k++ {
- KeyName := t1.Field(k).Name
- if KeyName == "GsMainId" || KeyName == "ID" || KeyName == "GsBaseModel" || KeyName == "Type" || KeyName == "JmxzdmId" || KeyName == "JmxzdmSb" {
- continue
- }
-
- Value := common.StrToFloat(v1.Field(k).Interface().(string))
- for j := 0; j < t2.NumField(); j++ {
- if KeyName == t2.Field(j).Name {
- if Value != common.StrToFloat(v2.Field(j).Interface().(string)) {
- logger.Info(KeyName, "-对比失败[税局为:", Value, "系统为:", common.StrToFloat(v2.Field(j).Interface().(string)), "]")
- status = 2
- }
- break
- }
- }
- }
- return status
- }
- func MakeMsg(str, data1, data2 string) string {
- return fmt.Sprintf(str+"数据对比失败:[税局为:%s;系统为:%s;]", data1, data2)
- }
- func CheckJmDm(all []sb.GsVatJsxm) error {
- for _, v := range all {
- if v.Type != 2 && v.Type != 3 {
- if v.SbJmxzdmJmDm == "" && v.SbJmxzdmJmHm == "" && (common.StrToFloat(v.Qcye) != 0 || common.StrToFloat(v.Bqfse) != 0 || common.StrToFloat(v.Bqydjse) != 0 || common.StrToFloat(v.Bqsjdjse) != 0 || common.StrToFloat(v.Qmye) != 0) {
- return taxerr.NewUserV3("存在未填写减免代码的减免项目", "请手动补充后重试")
- }
- }
- }
- return nil
- }
|