|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- import { ref } from 'vue'
- import { PrintflowEntry } from './PrintflowEntry'
- import type { PageBase } from '../ContractBase/PageBase'
- import Message from "@/views/front/develop/Communication/Message";
- import { PrintContainer } from "@/views/front/platfrom/Print/PrintContainer";
- // import { LoginAuthentication } from '../Library/Ext/Function/LoginAuthentication'
- import { ContractManager } from '../Contracts/ContractManager'
- import PlatformLogger from "@/views/front/platfrom/common/LogSystem/PlatformLogger"; // import { ExamSystem } from '../ServiceProxy/Ext/ServiceHelper/ExamSystem'
- // import { AuthDataHelper } from '@/views/front/develop/Contract/Function/TradeAuth/AuthDataHelper';
- import { AuthDataHelper } from '@/views/front/develop/Contract/Function/TradeAuth/AuthDataHelper';
- import { CheckDataHelper } from '@/views/front/develop/Contract/Function/TradeCheck/CheckDataHelper';
- import TradeHandle from "@/views/front/develop/ServiceProxy.Ext/ServiceHelper/TradeHandle"
- import SocketManager from '@/views/front/develop/Communication/SocketListener/SocketManager'
- import { WorkFlowHandle } from '@/views/front/develop/ServiceProxy.Ext/ServiceHelper/WorkFlowHandle'
- import { TradeInfoData } from "@/views/front/develop/Library.Ext/TradeExtension/TradeInfo/TradeInfoData"
- import { ServiceSettings } from '../../ServiceProxy.Ext/ServiceSettings';
- import Hue from '@/components/ColorPicker/common/Hue.vue';
- import SystemFunction from '../../Library.Ext/Function/SystemFunction';
- import LoginUserInfo from '@/views/front/platfrom/common/RunningParameters/LoginUserInfo';
-
- /**
- * 提交逻辑入口(抽象类)
- */
- export abstract class SubmitEntry extends PrintflowEntry {
- private _submitted = ref(false)
- private _morePrintList: PrintContainer[] = []
- private _flag2Finally = false
- private static _counter = 0
-
- /**
- * 提交标识,当提交成功后将变为true
- */
- public get Submitted(): boolean {
- return this._submitted.value
- }
- private set Submitted(value: boolean) {
- this._submitted.value = value
- }
-
- /**
- * 是否自定义检测通讯返包
- */
- public IsCustomizeVerify = false
-
- /**
- * 更多的打印数据
- */
- public get MorePrintList(): PrintContainer[] {
- return this._morePrintList
- }
-
- /**
- * 执行提交流程
- */
- public RaiseSubmit(): boolean {
- if (!this.MessageData || !this.PageData || this.Submitted) return false
-
- const serialNumber = this.PageData.CreateSerialNumber()
- if (!serialNumber) return false
-
- if (serialNumber.length > 8) {
- this.MessageData.Fd96_Q = serialNumber.substring(8)
- }
-
- const authdata = new AuthDataHelper(this.PageData)
- const checkdata = new CheckDataHelper(this.PageData)
-
- if (checkdata.SuperTeller) {
- this.MessageData.Fd8 = checkdata.SuperTeller
- }
-
- if (authdata.AuthTeller) {
- this.MessageData.Fd9_1 = authdata.AuthTeller
- }
-
- this.MessageData.Fd14 = this.PageData.TradeModel.Code
-
- // 考试系统相关处理
- let sendMessage = ''
- // if (ExamSystem.Instance.InExamMode) {
- // sendMessage = ExamSystem.Instance.KGetMessageString(this.MessageData, "发送")
- // }hulei_cs 暂不考虑考试系统
-
- this.MessageData.SerialNumber = this.TradeInfo.SystemSerialNumber
- if (!this.StashPrintData()) return false
-
- const flag = SystemFunction.DoTransit(this.MessageData)
- this.MessageData.SerialNumber = ''
-
- // 考试系统相关处理
- // if (ExamSystem.Instance.InExamMode) {
- // const receiveMessage = ExamSystem.Instance.KGetMessageString(this.MessageData, "返回")
- // ExamSystem.Instance.SendExamData(
- // sendMessage,
- // receiveMessage,
- // this.TradeInfo.TradeCode,
- // this.TradeInfo.SystemSerialNumber || ''
- // )
- // } hulei_cs 暂不考虑考试系统
-
- if (this.IsCustomizeVerify) {
- if (!this.SubmitComplete()) return false
- } else {
- if (!flag) {
- // this.TradeAPIs.ShowWarnMessageBox("提交交易不成功, 为了避免重复提交\n请查看该笔业务流程是否已经完成!")
- PlatformLogger.TradeInfo(`提交交易不成功,为了避免重复提交</n>请主动去查看该笔业务流程是否已经完成!\n前端流水号:${serialNumber}\n操作柜员:${this.MessageData.Fd7}`)
- TradeHandle.WriteImportantLog(
- `${serialNumber}提交交易无法确认状态`,
- "通讯返回false,请检查网络",
- this.PageData.TradeModel.Code,
- "RaiseSubmit",
- "1",
- SocketManager.GetLocalIpAddressList(),//.join(',') join方法暂时不用
- )
- this.PageData.Close()
- return false
- }
- if (!this.AutoVerify()) return false
- try {
- this.SubmitComplete()
- } catch (ex) {
- PlatformLogger.SystemErrorInfo("SubmitEntry.RaiseSubmit方法,执行SubmitComplete发生异常!", ex)
- }
- }
-
- try {
- if (!new RegExp(ServiceSettings.GetConfig("SkipFlagSubmitted", "none")).test(this.PageData.TradeInfo.TradeCode)) {
- this.Submitted = true
- }
-
- // this.PageData.TradeBus.RecvMessage = this.MessageData
- // this.PageData.TradeBus.PageAction = this.PageData.constructor.name
-
- this.UploadData()
- this.RaiseCallbackDescription()
-
- // this.PageData.PagePrinted = this.PageData_PagePrinted hulei先注销
- this.RaisePrint()
- } catch (ex) {
- // this.TradeAPIs.ShowInfoMessageBox(`提交交易成功,解析返回数据出错,错误信息:\n${ex.message}`)
- const msgLog = this.GetMessageString(this.MessageData)
- PlatformLogger.SystemErrorInfo(`提交交易成功,解析返回数据出错\n***************************************************\n${msgLog}\n`, ex)
- TradeHandle.WriteImportantLog(
- `${serialNumber}提交交易成功,解析返回数据出错`,
- `${ex.message}\n${ex.stack}`,
- this.PageData.TradeModel.Code,
- "RaiseSubmit",
- "1",
- SocketManager.GetLocalIpAddressList(),//.join(',') hulei_todo
- )
- }
-
- // this.PageData_PagePrinted(null, null)
- this.TradeCompleted()
-
- authdata.AuthTeller = ''
- authdata.AuthTeller2 = ''
- checkdata.SuperTeller = ''
- // this.PageData.ClearSerialNumber()
- // TradeInfoData.GetTradeInfo(this.PageData).SerialNumber = '' hulei_todo
-
- return true
- }
-
- /**
- * 自动检测通讯返包
- */
- private AutoVerify(): boolean {
- if (this.MessageData.Fd12 !== "0000") {
- // this.PageData.TradeAPIs.ShowErrorMessageBox(this.PageData.GetError(this.MessageData))
- //hulei_todo
- return false
- }
- return true
- }
-
- /**
- * 执行打印流程
- */
- public RaisePrint(): boolean {
- //hulei_todo 打印先不写
- // if (this.PageData instanceof ISubmitContract) {
- // return this.RaisePrintflow(false)
- // }
-
- // let printList: PrintContainer[] | null = null
- // try {
- // if (!this.CreatePrintList(printList)) {
- // TradeHandle.WriteImportantLog(
- // "SubmitEntry.RaisePrint方法,调用CreatePrintList方法失败!",
- // this.MessageData.FileData,
- // this.PageData.TradeModel.Code,
- // "RaiseSubmit",
- // "5",
- // SocketManager.GetLocalIpAddressList().join(',')
- // )
- // }
- // } catch (ex) {
- // PlatformLogger.SystemErrorInfo("SubmitEntry.RaisePrint方法,调用CreatePrintList方法发生异常!", ex)
- // this.PageData.ShowErrorMessageBox("产生凭证打印清单失败!请检查完整性...")
- // TradeHandle.WriteImportantLog(
- // "SubmitEntry.RaisePrint方法,调用CreatePrintList方法发生异常!",
- // `${ex.message}\n${ex.stack}`,
- // this.PageData.TradeModel.Code,
- // "RaiseSubmit",
- // "5",
- // SocketManager.GetLocalIpAddressList().join(',')
- // )
- // }
-
- // if (!printList) printList = []
- // printList.push(...this.MorePrintList)
- // if (printList.length === 0) return true
-
- return true;// ContractManager.RaisePrint(this.PageData, this.MessageData, printList)
- }
-
- // private PageData_PagePrinted(sender: any, e: any): void {
- // this.PageData.Log2PagePrinted(`触发finally${this._flag2Finally}`)
- // this.PageData.PagePrinted = null
- // if (this._flag2Finally) return
- // this._flag2Finally = true
- // this.Finally()
- // } hulei_todo 打印部分先注
-
- private GetMessageString(msg: Message): string {
- const props = Object.getOwnPropertyNames(msg)
- let strText = ''
-
- props.filter(p => p.startsWith('Fd')).forEach(p => {
- const val = msg[p].toString().trim().replace(/\r|\n/g, '')
- if (val) {
- strText += `[${p}=${val}]\n`
- }
- })
-
- return strText
- }
-
- private UploadData(): void {
- try {
- const tradeInfo = {
- TellerNo: LoginUserInfo.TellerNo,
- TradeNo: this.PageData.TradeModel.Code,
- Tlrlvl: "",
- BrNo: LoginUserInfo.KinbrNo,
- Status: 1,
- BlackSerialNo2: "",//this.MessageData.CustomizeTransitEntry?.SerialNo || this.MessageData.Fd126_1,""
- BlackSerialNo: this.MessageData.Fd4,
- TradeFileName: this.constructor.name,
- BusinessDate: LoginUserInfo.TradeDate
- }
-
- const authdata = new AuthDataHelper(this.PageData)
- const checkdata = new CheckDataHelper(this.PageData)
- let pageData: Uint8Array = new Uint8Array()
-
- if (checkdata.SuperTeller || authdata.AuthTeller) {
- //hulei_todo
- //pageData = this.PageData.SaveTradePage(this.PageData.Content)
- }
-
- const tradeBus = TradeInfoData.GetTradeInfo().TradeBus.Serialize()
- const serialNumber = this.PageData.CreateSerialNumber()
-
- setTimeout(() => {
- try {
- WorkFlowHandle.GetWorkFlowTradeSubmit(
- tradeInfo,
- pageData,
- tradeBus,
- "",
- serialNumber,
- false,
- true
- )
- } catch (e) {
- TradeHandle.WriteImportantLog(
- "UploadData",
- `${e.message}\n${e.stack}`,
- "GetWorkFlowTradeSubmitException",
- "0",
- "",
- SocketManager.GetLocalIpAddressList(),//.join(',') hulei_todo
- )
- }
- }, 0)
- } catch (ex) {
- PlatformLogger.SystemErrorInfo("SubmitEntry.UploadData方法,上载交易数据发生异常!", ex)
- }
- }
-
- private RaiseCallbackDescription(): void {
- let displayDesc: Record<string, string> | null = null
-
- try {
- displayDesc = this.CreateDisplayDescription()
- } catch (ex) {
- PlatformLogger.SystemErrorInfo("SubmitEntry.RaiseCallbackDescription方法,创建回显要素集合发生异常!", ex)
- }
-
- if (!displayDesc) {
-
- // this.TradeAPIs.ShowSuccessMessageBox()
- } else {
- // Vue中实现类似WPF的WrapPanel和BulletDecorator效果
- // 这里需要根据实际UI框架实现对应组件
- const wrapper = document.createElement('div')
- wrapper.style.display = 'flex'
- wrapper.style.flexWrap = 'wrap'
- wrapper.style.gap = '10px'
-
- Object.entries(displayDesc).forEach(([key, value]) => {
- const item = document.createElement('div')
- item.style.display = 'flex'
- item.style.alignItems = 'center'
- item.style.minWidth = '350px'
-
- const bullet = document.createElement('span')
- bullet.textContent = `${key}:`
- bullet.style.marginRight = '5px'
-
- const content = document.createElement('span')
- content.textContent = value
-
- item.appendChild(bullet)
- item.appendChild(content)
- wrapper.appendChild(item)
- })
-
- // this.TradeAPIs.ShowSuccessMessageBox(wrapper)//hulei_todo
- }
- }
-
- public TradeCompleted(): boolean {
- SubmitEntry._counter++
- if (SubmitEntry._counter % ServiceSettings.GetConfig("PrinterLoop", 99999) === 0) {
- // 浏览器环境下无法直接操作进程,这里需要根据实际环境调整
- console.log('Printer process cleanup triggered')
- }
-
- if (this.PageData.TradeAPIs.GetTradeMetadata("isClosePage")?.toLowerCase() === "true") {
- // this.PageData.OpenPage(this.PageData.TradeModel.Action, null)hulei_todo 打开页面 这个与vue中不确定
- } else {
- this.PageData.Close()
- }
-
- return true
- }
-
- public override GeneratePrintList(): PrintContainer[] {
- let printList: PrintContainer[] | null = null
-
- try {
- if (!this.CreatePrintList(printList)) {
- TradeHandle.WriteImportantLog(
- "SubmitEntry.RaisePrint方法,调用CreatePrintList方法失败!",
- this.MessageData.fileData,
- this.PageData.TradeModel.Code,
- "RaiseSubmit",
- "5",
- SocketManager.GetLocalIpAddressList(),//.join(',')
- )
- }
- } catch (ex) {
- PlatformLogger.SystemErrorInfo("SubmitEntry.RaisePrint方法,调用CreatePrintList方法发生异常!", ex)
- // this.TradeAPIs.ShowErrorMessageBox("产生凭证打印清单失败!请检查完整性...")
- TradeHandle.WriteImportantLog(
- "SubmitEntry.RaisePrint方法,调用CreatePrintList方法发生异常!",
- `${ex.message}\n${ex.stack}`,
- this.PageData.TradeModel.Code,
- "RaiseSubmit",
- "5",
- SocketManager.GetLocalIpAddressList(),//.join(',')
- )
- }
-
- if (!printList) printList = []
- printList.push(...this.MorePrintList)
- return printList
- }
-
- public override PreviewPrintflow(): boolean {
- return true
- }
-
- /**
- * 提交完毕,并验证结果
- */
- public abstract SubmitComplete(): boolean
-
- /**
- * 流程处理结束,执行后续操作
- */
- public abstract Finally(): boolean
-
- /**
- * 创建打印列表
- */
- public abstract CreatePrintList(outList: PrintContainer[] | null): boolean
-
- /**
- * 创建回显要素集合
- */
- public CreateDisplayDescription(): Record<string, string> | null {
- return null
- }
- }
-
- // Vue组合式API封装
- export const useSubmitEntry = () => {
- return {
- SubmitEntry
- }
- }
|