fix: 修复中介导入成功条数计算错误
问题: - 导入成功条数显示为负数 - 原因:成功数量计算使用 validRecords.size() - failures.size() - 但没有使用实际的数据库操作返回值 修复: - saveBatchWithUpsert 和 saveBatch 方法现在返回 int - 累加实际的数据库影响行数 - 使用 actualSuccessCount 变量跟踪真实成功数量 影响范围: - CcdiIntermediaryPersonImportServiceImpl - CcdiIntermediaryEntityImportServiceImpl
This commit is contained in:
20
doc/test-data/purchase_transaction/node_modules/immediate/LICENSE.txt
generated
vendored
Normal file
20
doc/test-data/purchase_transaction/node_modules/immediate/LICENSE.txt
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
Copyright (c) 2012 Barnesandnoble.com, llc, Donavon West, Domenic Denicola, Brian Cavalier
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
93
doc/test-data/purchase_transaction/node_modules/immediate/README.md
generated
vendored
Normal file
93
doc/test-data/purchase_transaction/node_modules/immediate/README.md
generated
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
# immediate [](https://travis-ci.org/calvinmetcalf/immediate)
|
||||
|
||||
```
|
||||
npm install immediate --save
|
||||
```
|
||||
|
||||
then
|
||||
|
||||
```js
|
||||
var immediate = require("immediate");
|
||||
|
||||
immediate(function () {
|
||||
// this will run soon
|
||||
});
|
||||
|
||||
immediate(function (arg1, arg2) {
|
||||
// get your args like in iojs
|
||||
}, thing1, thing2);
|
||||
```
|
||||
|
||||
## Introduction
|
||||
|
||||
**immediate** is a microtask library, decended from [NobleJS's setImmediate](https://github.com/NobleJS/setImmediate), but including ideas from [Cujo's When](https://github.com/cujojs/when) and [RSVP][RSVP].
|
||||
|
||||
immediate takes the tricks from setImmedate and RSVP and combines them with the schedualer inspired (vaugly) by whens.
|
||||
|
||||
Note versions 2.6.5 and earlier were strictly speaking a 'macrotask' library not a microtask one, [see this for the difference](https://github.com/YuzuJS/setImmediate#macrotasks-and-microtasks), if you need a macrotask library, [I got you covered](https://github.com/calvinmetcalf/macrotask).
|
||||
|
||||
Several new features were added in versions 3.1.0 and 3.2.0 to maintain parity with
|
||||
process.nextTick, but the 3.0.x series is still being kept up to date if you just need
|
||||
the small barebones version.
|
||||
|
||||
|
||||
## The Tricks
|
||||
|
||||
### `process.nextTick`
|
||||
|
||||
Note that we check for *actual* Node.js environments, not emulated ones like those produced by browserify or similar.
|
||||
|
||||
### `MutationObserver`
|
||||
|
||||
This is what [RSVP][RSVP] uses, it's very fast, details on [MDN](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver).
|
||||
|
||||
|
||||
### `MessageChannel`
|
||||
|
||||
Unfortunately, `postMessage` has completely different semantics inside web workers, and so cannot be used there. So we
|
||||
turn to [`MessageChannel`][MessageChannel], which has worse browser support, but does work inside a web worker.
|
||||
|
||||
### `<script> onreadystatechange`
|
||||
|
||||
For our last trick, we pull something out to make things fast in Internet Explorer versions 6 through 8: namely,
|
||||
creating a `<script>` element and firing our calls in its `onreadystatechange` event. This does execute in a future
|
||||
turn of the event loop, and is also faster than `setTimeout(…, 0)`, so hey, why not?
|
||||
|
||||
## Tricks we don't use
|
||||
|
||||
### `setImmediate`
|
||||
We avoid this process.nextTick in node is better suited to our needs and in Internet Explorer 10 there is a broken version of setImmediate we avoid using this.
|
||||
|
||||
|
||||
In Node.js, do
|
||||
|
||||
```
|
||||
npm install immediate
|
||||
```
|
||||
|
||||
then
|
||||
|
||||
```js
|
||||
var immediate = require("immediate");
|
||||
```
|
||||
|
||||
|
||||
## Reference and Reading
|
||||
|
||||
* [Efficient Script Yielding W3C Editor's Draft][spec]
|
||||
* [W3C mailing list post introducing the specification][list-post]
|
||||
* [IE Test Drive demo][ie-demo]
|
||||
* [Introductory blog post by Nicholas C. Zakas][ncz]
|
||||
* I wrote a couple blog pots on this, [part 1][my-blog-1] and [part 2][my-blog-2]
|
||||
|
||||
[RSVP]: https://github.com/tildeio/rsvp.js
|
||||
[spec]: https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html
|
||||
[list-post]: http://lists.w3.org/Archives/Public/public-web-perf/2011Jun/0100.html
|
||||
[ie-demo]: http://ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html
|
||||
[ncz]: http://www.nczonline.net/blog/2011/09/19/script-yielding-with-setimmediate/
|
||||
[nextTick]: http://nodejs.org/docs/v0.8.16/api/process.html#process_process_nexttick_callback
|
||||
[postMessage]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#posting-messages
|
||||
[MessageChannel]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#channel-messaging
|
||||
[cross-browser-demo]: http://calvinmetcalf.github.io/setImmediate-shim-demo
|
||||
[my-blog-1]:http://calvinmetcalf.com/post/61672207151/setimmediate-etc
|
||||
[my-blog-2]:http://calvinmetcalf.com/post/61761231881/javascript-schedulers
|
||||
69
doc/test-data/purchase_transaction/node_modules/immediate/lib/browser.js
generated
vendored
Normal file
69
doc/test-data/purchase_transaction/node_modules/immediate/lib/browser.js
generated
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
'use strict';
|
||||
var Mutation = global.MutationObserver || global.WebKitMutationObserver;
|
||||
|
||||
var scheduleDrain;
|
||||
|
||||
{
|
||||
if (Mutation) {
|
||||
var called = 0;
|
||||
var observer = new Mutation(nextTick);
|
||||
var element = global.document.createTextNode('');
|
||||
observer.observe(element, {
|
||||
characterData: true
|
||||
});
|
||||
scheduleDrain = function () {
|
||||
element.data = (called = ++called % 2);
|
||||
};
|
||||
} else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
|
||||
var channel = new global.MessageChannel();
|
||||
channel.port1.onmessage = nextTick;
|
||||
scheduleDrain = function () {
|
||||
channel.port2.postMessage(0);
|
||||
};
|
||||
} else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
|
||||
scheduleDrain = function () {
|
||||
|
||||
// Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
|
||||
// into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
|
||||
var scriptEl = global.document.createElement('script');
|
||||
scriptEl.onreadystatechange = function () {
|
||||
nextTick();
|
||||
|
||||
scriptEl.onreadystatechange = null;
|
||||
scriptEl.parentNode.removeChild(scriptEl);
|
||||
scriptEl = null;
|
||||
};
|
||||
global.document.documentElement.appendChild(scriptEl);
|
||||
};
|
||||
} else {
|
||||
scheduleDrain = function () {
|
||||
setTimeout(nextTick, 0);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
var draining;
|
||||
var queue = [];
|
||||
//named nextTick for less confusing stack traces
|
||||
function nextTick() {
|
||||
draining = true;
|
||||
var i, oldQueue;
|
||||
var len = queue.length;
|
||||
while (len) {
|
||||
oldQueue = queue;
|
||||
queue = [];
|
||||
i = -1;
|
||||
while (++i < len) {
|
||||
oldQueue[i]();
|
||||
}
|
||||
len = queue.length;
|
||||
}
|
||||
draining = false;
|
||||
}
|
||||
|
||||
module.exports = immediate;
|
||||
function immediate(task) {
|
||||
if (queue.push(task) === 1 && !draining) {
|
||||
scheduleDrain();
|
||||
}
|
||||
}
|
||||
73
doc/test-data/purchase_transaction/node_modules/immediate/lib/index.js
generated
vendored
Normal file
73
doc/test-data/purchase_transaction/node_modules/immediate/lib/index.js
generated
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
'use strict';
|
||||
var Mutation = global.MutationObserver || global.WebKitMutationObserver;
|
||||
|
||||
var scheduleDrain;
|
||||
|
||||
if (process.browser) {
|
||||
if (Mutation) {
|
||||
var called = 0;
|
||||
var observer = new Mutation(nextTick);
|
||||
var element = global.document.createTextNode('');
|
||||
observer.observe(element, {
|
||||
characterData: true
|
||||
});
|
||||
scheduleDrain = function () {
|
||||
element.data = (called = ++called % 2);
|
||||
};
|
||||
} else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
|
||||
var channel = new global.MessageChannel();
|
||||
channel.port1.onmessage = nextTick;
|
||||
scheduleDrain = function () {
|
||||
channel.port2.postMessage(0);
|
||||
};
|
||||
} else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
|
||||
scheduleDrain = function () {
|
||||
|
||||
// Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
|
||||
// into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
|
||||
var scriptEl = global.document.createElement('script');
|
||||
scriptEl.onreadystatechange = function () {
|
||||
nextTick();
|
||||
|
||||
scriptEl.onreadystatechange = null;
|
||||
scriptEl.parentNode.removeChild(scriptEl);
|
||||
scriptEl = null;
|
||||
};
|
||||
global.document.documentElement.appendChild(scriptEl);
|
||||
};
|
||||
} else {
|
||||
scheduleDrain = function () {
|
||||
setTimeout(nextTick, 0);
|
||||
};
|
||||
}
|
||||
} else {
|
||||
scheduleDrain = function () {
|
||||
process.nextTick(nextTick);
|
||||
};
|
||||
}
|
||||
|
||||
var draining;
|
||||
var queue = [];
|
||||
//named nextTick for less confusing stack traces
|
||||
function nextTick() {
|
||||
draining = true;
|
||||
var i, oldQueue;
|
||||
var len = queue.length;
|
||||
while (len) {
|
||||
oldQueue = queue;
|
||||
queue = [];
|
||||
i = -1;
|
||||
while (++i < len) {
|
||||
oldQueue[i]();
|
||||
}
|
||||
len = queue.length;
|
||||
}
|
||||
draining = false;
|
||||
}
|
||||
|
||||
module.exports = immediate;
|
||||
function immediate(task) {
|
||||
if (queue.push(task) === 1 && !draining) {
|
||||
scheduleDrain();
|
||||
}
|
||||
}
|
||||
42
doc/test-data/purchase_transaction/node_modules/immediate/package.json
generated
vendored
Normal file
42
doc/test-data/purchase_transaction/node_modules/immediate/package.json
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"name": "immediate",
|
||||
"version": "3.0.6",
|
||||
"description": "A cross browser microtask library",
|
||||
"contributors": [
|
||||
"Domenic Denicola <domenic@domenicdenicola.com> (http://domenicdenicola.com)",
|
||||
"Donavon West <github@donavon.com> (http://donavon.com)",
|
||||
"Yaffle",
|
||||
"Calvin Metcalf <calvin.metcalf@gmail.com>"
|
||||
],
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/calvinmetcalf/immediate.git"
|
||||
},
|
||||
"files": [
|
||||
"lib",
|
||||
"dist"
|
||||
],
|
||||
"bugs": "https://github.com/calvinmetcalf/immediate/issues",
|
||||
"main": "lib/index.js",
|
||||
"scripts": {
|
||||
"build": "npm run build-node && npm run build-js && npm run uglify",
|
||||
"build-node": "browserify-transform-cli inline-process-browser unreachable-branch-transform < ./lib/index.js > ./lib/browser.js",
|
||||
"uglify": "uglifyjs dist/immediate.js -mc > dist/immediate.min.js",
|
||||
"build-js": "browserify -s immediate ./lib/browser.js | derequire > dist/immediate.js",
|
||||
"test": "jshint lib/*.js && node test/tests.js"
|
||||
},
|
||||
"browser": {
|
||||
"./lib/index.js": "./lib/browser.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"browserify": "^13.0.0",
|
||||
"browserify-transform-cli": "^1.1.1",
|
||||
"derequire": "^2.0.0",
|
||||
"inline-process-browser": "^2.0.0",
|
||||
"jshint": "^2.5.1",
|
||||
"tape": "^4.0.0",
|
||||
"uglify-js": "^2.4.13",
|
||||
"unreachable-branch-transform": "^0.5.1"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user