gcl
Version:
码农村nodejs类库,完成解决回调陷阱,配置框架,IOC框架,统一多DB访问框架,可扩展日志框架和io/db/net/thread/pool 克隆表达式,加解密算法等等一系列基础类库和算法的实现
1,239 lines (1,042 loc) • 41.9 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Cron = undefined;
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _tool = require('../common/tool');
var _tool2 = _interopRequireDefault(_tool);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/// <summary>
/// 用于分别获取年/月/星期/日/时/分/秒实现
/// </summary>
var IDateTimePart = function () {
function IDateTimePart(name) {
(0, _classCallCheck3.default)(this, IDateTimePart);
this.name = name;
}
(0, _createClass3.default)(IDateTimePart, [{
key: 'GetTime',
value: function GetTime(time) {}
}, {
key: 'GetMaxDate',
value: function GetMaxDate(time) {}
}, {
key: 'AddTime',
value: function AddTime(time, data) {}
}]);
return IDateTimePart;
}();
/// <summary>
/// 年
/// </summary>
//使用require('cron-parser')进行封装
var YearDateTimePart = function (_IDateTimePart) {
(0, _inherits3.default)(YearDateTimePart, _IDateTimePart);
function YearDateTimePart() {
(0, _classCallCheck3.default)(this, YearDateTimePart);
return (0, _possibleConstructorReturn3.default)(this, (YearDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(YearDateTimePart)).call(this, 'YearDateTimePart'));
}
(0, _createClass3.default)(YearDateTimePart, [{
key: 'GetTime',
value: function GetTime(time) {
return time.getFullYear();
}
}, {
key: 'GetMaxDate',
value: function GetMaxDate(time) {
return 10000;
}
}, {
key: 'AddTime',
value: function AddTime(time, data) {
return time.add('y', data);
}
}]);
return YearDateTimePart;
}(IDateTimePart);
/// <summary>
/// 星期
/// </summary>
var WeekDateTimePart = function (_IDateTimePart2) {
(0, _inherits3.default)(WeekDateTimePart, _IDateTimePart2);
function WeekDateTimePart() {
(0, _classCallCheck3.default)(this, WeekDateTimePart);
return (0, _possibleConstructorReturn3.default)(this, (WeekDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(WeekDateTimePart)).call(this, 'WeekDateTimePart'));
}
(0, _createClass3.default)(WeekDateTimePart, [{
key: 'GetTime',
value: function GetTime(time) {
return time.getDay();
}
}, {
key: 'GetMaxDate',
value: function GetMaxDate(time) {
//limit=new Date(time.getFullYear(), time.getMonth() + 1, 1).add('d', -1).getDate();
//return (limit - time.getDate() < 7) ? (limit - time.getDate() + GetTime(time)) : 6;
return 7;
}
}, {
key: 'AddTime',
value: function AddTime(time, data) {
return time.add('d', data);
}
}]);
return WeekDateTimePart;
}(IDateTimePart);
/// <summary>
/// 月
/// </summary>
var MonthDateTimePart = function (_IDateTimePart3) {
(0, _inherits3.default)(MonthDateTimePart, _IDateTimePart3);
function MonthDateTimePart() {
(0, _classCallCheck3.default)(this, MonthDateTimePart);
return (0, _possibleConstructorReturn3.default)(this, (MonthDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(MonthDateTimePart)).call(this, 'MonthDateTimePart'));
}
(0, _createClass3.default)(MonthDateTimePart, [{
key: 'GetTime',
value: function GetTime(time) {
return time.getMonth() + 1;
}
}, {
key: 'GetMaxDate',
value: function GetMaxDate(time) {
return 12;
}
}, {
key: 'AddTime',
value: function AddTime(time, data) {
return time.add('m', data);
}
}]);
return MonthDateTimePart;
}(IDateTimePart);
/// <summary>
/// 日
/// </summary>
var DayDateTimePart = function (_IDateTimePart4) {
(0, _inherits3.default)(DayDateTimePart, _IDateTimePart4);
function DayDateTimePart() {
(0, _classCallCheck3.default)(this, DayDateTimePart);
return (0, _possibleConstructorReturn3.default)(this, (DayDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(DayDateTimePart)).call(this, 'DayDateTimePart'));
}
(0, _createClass3.default)(DayDateTimePart, [{
key: 'GetTime',
value: function GetTime(time) {
return time.getDate();
}
}, {
key: 'GetMaxDate',
value: function GetMaxDate() {
var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();
return new Date(time.getFullYear(), time.getMonth() + 1, 1).add('d', -1).getDate();
}
}, {
key: 'AddTime',
value: function AddTime(time, data) {
return time.add('d', data);
}
}]);
return DayDateTimePart;
}(IDateTimePart);
/// <summary>
/// 时
/// </summary>
var HourDateTimePart = function (_IDateTimePart5) {
(0, _inherits3.default)(HourDateTimePart, _IDateTimePart5);
function HourDateTimePart() {
(0, _classCallCheck3.default)(this, HourDateTimePart);
return (0, _possibleConstructorReturn3.default)(this, (HourDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(HourDateTimePart)).call(this, 'HourDateTimePart'));
}
(0, _createClass3.default)(HourDateTimePart, [{
key: 'GetTime',
value: function GetTime(time) {
return time.getHours();
}
}, {
key: 'GetMaxDate',
value: function GetMaxDate(time) {
return 24;
}
}, {
key: 'AddTime',
value: function AddTime(time, data) {
return time.add('h', data);
}
}]);
return HourDateTimePart;
}(IDateTimePart);
/// <summary>
/// 分
/// </summary>
var MinuteDateTimePart = function (_IDateTimePart6) {
(0, _inherits3.default)(MinuteDateTimePart, _IDateTimePart6);
function MinuteDateTimePart() {
(0, _classCallCheck3.default)(this, MinuteDateTimePart);
return (0, _possibleConstructorReturn3.default)(this, (MinuteDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(MinuteDateTimePart)).call(this, 'MinuteDateTimePart'));
}
(0, _createClass3.default)(MinuteDateTimePart, [{
key: 'GetTime',
value: function GetTime(time) {
return time.getMinutes();
}
}, {
key: 'GetMaxDate',
value: function GetMaxDate(time) {
return 60;
}
}, {
key: 'AddTime',
value: function AddTime(time, data) {
return time.add('n', data);
}
}]);
return MinuteDateTimePart;
}(IDateTimePart);
/// <summary>
/// 秒
/// </summary>
var SecondDateTimePart = function (_IDateTimePart7) {
(0, _inherits3.default)(SecondDateTimePart, _IDateTimePart7);
function SecondDateTimePart() {
(0, _classCallCheck3.default)(this, SecondDateTimePart);
return (0, _possibleConstructorReturn3.default)(this, (SecondDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(SecondDateTimePart)).call(this, 'SecondDateTimePart'));
}
(0, _createClass3.default)(SecondDateTimePart, [{
key: 'GetTime',
value: function GetTime(time) {
return time.getSeconds();
}
}, {
key: 'GetMaxDate',
value: function GetMaxDate(time) {
return 60;
}
}, {
key: 'AddTime',
value: function AddTime(time, data) {
return time.add('s', data);
}
}]);
return SecondDateTimePart;
}(IDateTimePart);
var DateTimeContainer = function () {
function DateTimeContainer() {
(0, _classCallCheck3.default)(this, DateTimeContainer);
pri(this, { time: null });
}
(0, _createClass3.default)(DateTimeContainer, [{
key: 'SetDateTime',
value: function SetDateTime(time) {
pri(this).__.time = time;
}
}, {
key: 'GetDateTime',
value: function GetDateTime() {
return pri(this).__.time;
}
}]);
return DateTimeContainer;
}();
/**
*
各种Cron标记的基类a,b:a或者b
data a/b:a为底b的倍数
data a-b:从a到b
data a#b:允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本月第三周的星期五星期日为1 注意这里DayOfWeek 中星期日为0
data aL:在日期和星期意思不同,例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示周六,如果在day-of-week域中前面加上数字,它表示一个月的最后第几天,例如‘6L’就表示一个月的最后一个星期五
data aW:只允许日期域出现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写 “15W”,表示:这个月15号最近的工作日
data aC:
*/
var CronNode = function () {
function CronNode(nodeIdentify, par, dateTime) {
(0, _classCallCheck3.default)(this, CronNode);
pri(this, {
//todo 正则待验证
ndeIdentify: new RegExp(nodeIdentify),
parent: par,
datePart: dateTime
});
}
(0, _createClass3.default)(CronNode, [{
key: 'Next',
value: function Next(container) {
var _pri = pri(this),
_ = _pri._,
__ = _pri.__;
var changeValue = _.partRegen(container.GetDateTime(), __.datePart);
if (changeValue != 0) container.SetDateTime(__.datePart.AddTime(container.GetDateTime(), changeValue));
//console.log(__.datePart.name, changeValue + ":" + container.GetDateTime().toString('yyyy MM dd HH mm ss'));
//if ((parent != null && parent.Next(container)) || (parent == null && changeValue != 0)) {
if (__.parent != null && __.parent.Next(container) && __.datePart.name != 'DayDateTimePart') {
//特例处理Day和Week
//清零
var changeFirst = this.partGetFirst(container.GetDateTime(), __.datePart);
//console.log('first ' + __.datePart.name, changeFirst);
container.SetDateTime(__.datePart.AddTime(container.GetDateTime(), changeFirst));
return true;
}
//console.log(__.datePart.name);
return changeValue != 0;
}
}, {
key: 'NodeIdentify',
get: function get() {
return pri(this).__.ndeIdentify;
}
}]);
return CronNode;
}();
var CommonCronNode = function (_CronNode) {
(0, _inherits3.default)(CommonCronNode, _CronNode);
function CommonCronNode(nodeIdentify, par, dateTime) {
(0, _classCallCheck3.default)(this, CommonCronNode);
return (0, _possibleConstructorReturn3.default)(this, (CommonCronNode.__proto__ || (0, _getPrototypeOf2.default)(CommonCronNode)).call(this, nodeIdentify, par, dateTime));
}
(0, _createClass3.default)(CommonCronNode, [{
key: 'partRegen',
value: function partRegen(time, part) {
if (part.name == 'DayDateTimePart') return this.DayRegen(part.GetTime(time), part.GetMaxDate(time), part.GetMaxDate(time.add('m', 1)));else return this.Regen(part.GetTime(time), part.GetMaxDate(time));
}
}, {
key: 'partGetFirst',
value: function partGetFirst(time, part) {
if (part.name == 'DayDateTimePart') return this.DayGetFirst(part.GetTime(time), part.GetMaxDate(time), part.GetMaxDate(time.add('m', 1)));else return this.GetFirst(part.GetTime(time), part.GetMaxDate(time));
}
/**
* 29,30,31号必然可以设置在本月或者下下个月 一般的这里的条件只对2月有用
* @param {*} time
* @param {*} maxDate
* @param {*} nextMaxDate
*/
}, {
key: 'DayRegen',
value: function DayRegen(time, maxDate, nextMaxDate) {}
/**
* 29,30,31号必然可以设置在本月或者下下个月 一般的这里的条件只对2月有用
* @param {*} time
* @param {*} maxDate
* @param {*} nextMaxDate
*/
}, {
key: 'DayGetFirst',
value: function DayGetFirst(time, maxDate, nextMaxDate) {}
/**
* 仅仅用于处理数字
* @param {*} time
* @param {*} maxDate
*/
}, {
key: 'Regen',
value: function Regen(time, maxDate) {}
/**
* 仅仅用于处理数字
* @param {*} time
* @param {*} maxDate
*/
}, {
key: 'GetFirst',
value: function GetFirst(time, maxDate) {}
}]);
return CommonCronNode;
}(CronNode);
/// <summary>
/// 处理*号
/// </summary>
var XCronNode = function (_CommonCronNode) {
(0, _inherits3.default)(XCronNode, _CommonCronNode);
function XCronNode(text, par, part) {
(0, _classCallCheck3.default)(this, XCronNode);
return (0, _possibleConstructorReturn3.default)(this, (XCronNode.__proto__ || (0, _getPrototypeOf2.default)(XCronNode)).call(this, "\\*", par, part));
}
(0, _createClass3.default)(XCronNode, [{
key: 'DayRegen',
value: function DayRegen(time, maxDate, nextMaxDate) {
return 0;
}
}, {
key: 'DayGetFirst',
value: function DayGetFirst(time, maxDate, nextMaxDate) {
return 1 - time;
}
}, {
key: 'Regen',
value: function Regen(time, maxDate) {
return 0;
}
}, {
key: 'GetFirst',
value: function GetFirst(time, maxDate) {
return -1 * time;
}
}]);
return XCronNode;
}(CommonCronNode);
/// <summary>
/// 处理?号
/// </summary>
var QCronNode = function (_CronNode2) {
(0, _inherits3.default)(QCronNode, _CronNode2);
function QCronNode(text, par, part) {
(0, _classCallCheck3.default)(this, QCronNode);
return (0, _possibleConstructorReturn3.default)(this, (QCronNode.__proto__ || (0, _getPrototypeOf2.default)(QCronNode)).call(this, "\\?", par, part));
}
(0, _createClass3.default)(QCronNode, [{
key: 'partRegen',
value: function partRegen(time, part) {
return 0;
}
}, {
key: 'partGetFirst',
value: function partGetFirst(time, part) {
return 0;
}
}]);
return QCronNode;
}(CronNode);
/// <summary>
/// 处理具体数字
/// 请注意星期中1-7需要改为0-6
/// </summary>
var NCronNode = function (_CommonCronNode2) {
(0, _inherits3.default)(NCronNode, _CommonCronNode2);
function NCronNode(num, par, datePart) {
(0, _classCallCheck3.default)(this, NCronNode);
var _this11 = (0, _possibleConstructorReturn3.default)(this, (NCronNode.__proto__ || (0, _getPrototypeOf2.default)(NCronNode)).call(this, "\\d+", par, datePart));
var _pri2 = pri(_this11, { num: 0 }),
_ = _pri2._,
__ = _pri2.__;
__.num = parseInt(num);
if (datePart.name == 'WeekDateTimePart') __.num--;
return _this11;
}
(0, _createClass3.default)(NCronNode, [{
key: 'Regen',
value: function Regen(time, maxDate) {
var _pri3 = pri(this),
_ = _pri3._,
__ = _pri3.__;
return time > __.num ? maxDate - time + __.num : __.num - time;
}
}, {
key: 'GetFirst',
value: function GetFirst(time, maxDate) {
var _pri4 = pri(this),
_ = _pri4._,
__ = _pri4.__;
return __.num - time;
}
}, {
key: 'DayRegen',
value: function DayRegen(time, maxDate, nextMaxDate) {
var _pri5 = pri(this),
_ = _pri5._,
__ = _pri5.__;
//29,30,31号必然可以设置在本月或者下下个月 一般的这里的条件只对2月有用
return this.Regen(time, maxDate) + (time > __.num && __.num > nextMaxDate ? nextMaxDate : 0);
}
}, {
key: 'DayGetFirst',
value: function DayGetFirst(time, maxDate, nextMaxDate) {
var _pri6 = pri(this),
_ = _pri6._,
__ = _pri6.__;
if (__.num > maxDate)
//说明本月无法设置 设置为下个月
return maxDate - time + __.num;
return this.GetFirst(time, maxDate);
}
}]);
return NCronNode;
}(CommonCronNode);
/// <summary>
/// 处理逗号
/// </summary>
var DCronNode = function (_CommonCronNode3) {
(0, _inherits3.default)(DCronNode, _CommonCronNode3);
function DCronNode(num, par, datePart) {
(0, _classCallCheck3.default)(this, DCronNode);
var _this12 = (0, _possibleConstructorReturn3.default)(this, (DCronNode.__proto__ || (0, _getPrototypeOf2.default)(DCronNode)).call(this, "\\d+[,\\d+]+", par, datePart));
var _pri7 = pri(_this12, { nums: [] }),
_ = _pri7._,
__ = _pri7.__;
var _n = num.split(',');
for (var w = 0; w < _n.length; w++) {
if (datePart.name == 'WeekDateTimePart') __.nums[w] = parseInt(_n[w]) - 1;else __.nums[w] = parseInt(_n[w]);
}__.nums.sort(function (l, r) {
return l > r;
});
return _this12;
}
(0, _createClass3.default)(DCronNode, [{
key: 'GetSmallNum',
value: function GetSmallNum(time) {
var _pri8 = pri(this),
_ = _pri8._,
__ = _pri8.__;
if (time <= __.nums[0]) return 0;
if (time >= __.nums[__.nums.length - 1]) return __.nums.length - 1;
var l = 0,
r = void 0,
m = void 0;
r = __.nums.length;
while (r - l > 1) {
m = parseInt((l + r) / 2);
if (time >= __.nums[m]) l = m;else r = m;
}
return l;
}
}, {
key: 'Regen',
value: function Regen(time, maxDate) {
var _pri9 = pri(this),
_ = _pri9._,
__ = _pri9.__;
//当前数字已经大于最大的数
if (time > __.nums[__.nums.length - 1]) return maxDate - time + __.nums[0]; //maxDate - time +
var order = _.GetSmallNum(time);
return time > __.nums[order] ? __.nums[order + 1] - time : __.nums[order] - time;
}
}, {
key: 'GetFirst',
value: function GetFirst(time, maxDate) {
var _pri10 = pri(this),
_ = _pri10._,
__ = _pri10.__;
return __.nums[0] - time;
}
}, {
key: 'DayRegen',
value: function DayRegen(time, maxDate, nextMaxDate) {
var _pri11 = pri(this),
_ = _pri11._,
__ = _pri11.__;
if (time > __.nums[__.nums.length - 1]) {
//说明下个月也无法设置 设置为下下个月
//29,30,31号必然可以设置在本月或者下下个月 一般的这里的条件只对2月有用
return maxDate - time + __.nums[0] + (__.nums[0] > nextMaxDate ? nextMaxDate : 0);
}
var order = this.GetSmallNum(time);
return time > __.nums[order] ? __.nums[order + 1] - time : __.nums[order] - time;
}
}, {
key: 'DayGetFirst',
value: function DayGetFirst(time, maxDate, nextMaxDate) {
var _pri12 = pri(this),
_ = _pri12._,
__ = _pri12.__;
if (__.nums[0] > maxDate)
//说明本月无法设置 设置为下个月
return maxDate - time + __.nums[0];
return this.GetFirst(time, maxDate);
}
}]);
return DCronNode;
}(CommonCronNode);
/// <summary>
/// -号 //todo
/// </summary>
var SCronNode = function (_CommonCronNode4) {
(0, _inherits3.default)(SCronNode, _CommonCronNode4);
function SCronNode(num, par, datePart) {
(0, _classCallCheck3.default)(this, SCronNode);
var _this13 = (0, _possibleConstructorReturn3.default)(this, (SCronNode.__proto__ || (0, _getPrototypeOf2.default)(SCronNode)).call(this, "\\d+-\\d+", par, datePart));
var _pri13 = pri(_this13, { nums: [] }),
_ = _pri13._,
__ = _pri13.__;
var _n = num.split('-');
var l = parseInt(_n[0]);
var r = parseInt(_n[1]);
for (var w = 0; w < r - l + 1; w++) {
if (datePart.name == 'WeekDateTimePart') __.nums[w] = w + l - 1;else __.nums[w] = w + l;
}return _this13;
}
(0, _createClass3.default)(SCronNode, [{
key: 'GetSmallNum',
value: function GetSmallNum(time) {
var _pri14 = pri(this),
_ = _pri14._,
__ = _pri14.__;
if (time <= __.nums[0]) return 0;
if (time >= __.nums[__.nums.length - 1]) return __.nums.length - 1;
var l = 0,
r = void 0,
m = void 0;
r = __.nums.length;
while (r - l > 1) {
m = parseInt((l + r) / 2);
if (time >= __.nums[m]) l = m;else r = m;
}
return l;
}
}, {
key: 'Regen',
value: function Regen(time, maxDate) {
var _pri15 = pri(this),
_ = _pri15._,
__ = _pri15.__;
//当前数字已经大于最大的数
if (time > __.nums[__.nums.length - 1]) return maxDate - time + __.nums[0];
var order = _.GetSmallNum(time);
return time > __.nums[order] ? __.nums[order + 1] - time : __.nums[order] - time;
}
}, {
key: 'GetFirst',
value: function GetFirst(time, maxDate) {
var _pri16 = pri(this),
_ = _pri16._,
__ = _pri16.__;
return __.nums[0] - time;
}
}, {
key: 'DayRegen',
value: function DayRegen(time, maxDate, nextMaxDate) {
var _pri17 = pri(this),
_ = _pri17._,
__ = _pri17.__;
if (time > __.nums[__.nums.length - 1]) {
//说明下个月也无法设置 设置为下下个月
//29,30,31号必然可以设置在本月或者下下个月 一般的这里的条件只对2月有用
return maxDate - time + __.nums[0] + (__.nums[0] > nextMaxDate ? nextMaxDate : 0);
}
var order = _.GetSmallNum(time);
//当前数字已经大于最大的数
return time > __.nums[order] ? __.nums[order + 1] - time : __.nums[order] - time;
}
}, {
key: 'DayGetFirst',
value: function DayGetFirst(time, maxDate, nextMaxDate) {
var _pri18 = pri(this),
_ = _pri18._,
__ = _pri18.__;
if (__.nums[0] > maxDate)
//说明本月无法设置 设置为下个月
return maxDate - time + __.nums[0];
return _.GetFirst(time, maxDate);
}
}]);
return SCronNode;
}(CommonCronNode);
/// <summary>
/// 除号
/// </summary>
var PCronNode = function (_CommonCronNode5) {
(0, _inherits3.default)(PCronNode, _CommonCronNode5);
function PCronNode(num, par, part) {
(0, _classCallCheck3.default)(this, PCronNode);
var _this14 = (0, _possibleConstructorReturn3.default)(this, (PCronNode.__proto__ || (0, _getPrototypeOf2.default)(PCronNode)).call(this, "\\d+/\\d+", par, part));
var _pri19 = pri(_this14),
_ = _pri19._,
__ = _pri19.__;
_.l = 0;
_.r = 0;
var _n = num.split('/');
_.l = parseInt(_n[0]);
_.r = parseInt(_n[1]);
if (part.name == 'WeekDateTimePart') {
_.l--;
}
return _this14;
}
(0, _createClass3.default)(PCronNode, [{
key: 'GetBigNum',
value: function GetBigNum(time) {
var _pri20 = pri(this),
_ = _pri20._,
__ = _pri20.__;
return (parseInt((time - _.l) / _.r) + 1) * _.r + _.l;
}
}, {
key: 'DayRegen',
value: function DayRegen(time, maxDate, nextMaxDate) {
var _pri21 = pri(this),
_ = _pri21._,
__ = _pri21.__;
if (time > _.l && (time - _.l) % _.r == 0) return 0;
var value = _.GetBigNum(time);
if (value > maxDate)
//如果下个月不能设置那么就设置到下下个月
return maxDate - time + _.l + (_.l > nextMaxDate ? nextMaxDate : 0);else return value - time;
}
}, {
key: 'DayGetFirst',
value: function DayGetFirst(time, maxDate, nextMaxDate) {
var _pri22 = pri(this),
_ = _pri22._,
__ = _pri22.__;
if (_.l > maxDate)
//如果本月设置不了那么下个月肯定可以设置
return maxDate - time + _.l;
return _.l - time;
}
}, {
key: 'Regen',
value: function Regen(time, maxDate) {
var _pri23 = pri(this),
_ = _pri23._,
__ = _pri23.__;
if (time >= _.l && (time - _.l) % _.r == 0) return 0;
var value = _.GetBigNum(time);
if (value > maxDate) return maxDate - time + _.l;else return value - time;
}
}, {
key: 'GetFirst',
value: function GetFirst(time, maxDate) {
var _pri24 = pri(this),
_ = _pri24._,
__ = _pri24.__;
return _.l - time;
}
}]);
return PCronNode;
}(CommonCronNode);
/// <summary>
/// #号 注意将1-7转为0-6
/// </summary>
var ACronNode = function (_CronNode3) {
(0, _inherits3.default)(ACronNode, _CronNode3);
function ACronNode(num, par, part) {
(0, _classCallCheck3.default)(this, ACronNode);
var _this15 = (0, _possibleConstructorReturn3.default)(this, (ACronNode.__proto__ || (0, _getPrototypeOf2.default)(ACronNode)).call(this, "[1-7]#[1-5]", par, part));
var _pri25 = pri(_this15, {
GetMaxDay: function GetMaxDay(time, part) {
if (part.name == 'WeekDateTimePart') return new Date(time.getFullYear(), time.getMonth() + 1, 1).add('d', -1).getDate();else return part.GetMaxDate(time);
}
}),
_ = _pri25._,
__ = _pri25.__;
_.l = 0;
_.r = 0;
var _n = num.split('#');
_.l = parseInt(_n[0]);
_.r = parseInt(_n[1]);
return _this15;
}
/// <summary>
/// 得到第r个星期l是几号
/// </summary>
/// <param name="time"></param>
/// <param name="weekDay"></param>
/// <returns></returns>
(0, _createClass3.default)(ACronNode, [{
key: 'GetRightDay',
value: function GetRightDay(time, weekDay) {
var _pri26 = pri(this),
_ = _pri26._,
__ = _pri26.__;
//firstDay=7- (time - weekDay-1) % 7;
//if (firstDay == 7)
// firstDay = 0;
//firstDay = Math.Abs((time - weekDay - 1) % 7);
var firstDay = ((1 - time + weekDay) % 7 + 7) % 7;
return 7 * (this.r - 1) + 1 + _.l - firstDay + (this.l < firstDay ? 7 : 0);
}
}, {
key: 'partRegen',
value: function partRegen(time, part) {
var _pri27 = pri(this),
_ = _pri27._,
__ = _pri27.__;
var num = _.GetRightDay(time.getDate(), time.getDay());
var maxDate = __.GetMaxDay(time, part);
//判断如果正确的时间还未发生
if (time.getDate() <= num && num <= maxDate) {
return num - time.getDate();
} else {
var value = 0;
//判断如果正确的时间已经过期
while (time.getDate() > num || maxDate < num) {
//下个月1号
var _t = maxDate - time.getDate() + 1;
value += _t;
time = time.add('d', _t);
num = _.GetRightDay(time.getDate(), time.getDay());
maxDate = __.GetMaxDay(time, part);
}
return value + num - time.getDate();
}
}
}, {
key: 'partGetFirst',
value: function partGetFirst(time, part) {
var _pri28 = pri(this),
_ = _pri28._,
__ = _pri28.__;
var num = _.GetRightDay(time.getDate(), time.getDay());
var maxDate = __.GetMaxDay(time, part);
if (time.getDate() <= num && num <= maxDate) {
return time.getDate() - num;
} else {
var value = 0;
while (time.getDate() > num || maxDate < num) {
//下个月1号
var _t = maxDate - time.getDate() + 1;
value += _t;
time = time.add('d', _t);
num = _.GetRightDay(time.getDate(), time.getDay());
maxDate = __.GetMaxDay(time, part);
}
return value + num - time.getDate();
}
}
}]);
return ACronNode;
}(CronNode);
/// <summary>
/// W号
/// </summary>
var WCronNode = function (_CronNode4) {
(0, _inherits3.default)(WCronNode, _CronNode4);
function WCronNode() {
var num = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var par = arguments[1];
var part = arguments[2];
(0, _classCallCheck3.default)(this, WCronNode);
var _this16 = (0, _possibleConstructorReturn3.default)(this, (WCronNode.__proto__ || (0, _getPrototypeOf2.default)(WCronNode)).call(this, "(\\d+|L)W", par, part));
var _pri29 = pri(_this16),
_ = _pri29._,
__ = _pri29.__;
_.l = 0;
if (num.toUpperCaseCase() == "LW") _.l = 31;else _.l = parseInt(num.substr(0, num.length - 1));
return _this16;
}
/// <summary>
/// 得到l日附近的工作日是几号
/// </summary>
/// <param name="time"></param>
/// <param name="weekDay"></param>
/// <returns></returns>
(0, _createClass3.default)(WCronNode, [{
key: 'GetRightDay',
value: function GetRightDay(time, maxDate, weekDay) {
//firstDay = 7 - (time - weekDay - 1) % 7;
//if (firstDay == 7)
// firstDay = 0;
//return ((time-1)%7+firstDay)%7;
var _pri30 = pri(this),
_ = _pri30._,
__ = _pri30.__;
var _l = Math.min(_.l, maxDate);
var r = ((_l - time + weekDay) % 7 + 7) % 7;
if (r > 5) return _l - 1;
if (r < 1) return _l + 1;
return _l;
}
}, {
key: 'partRegen',
value: function partRegen(time, part) {
var maxDate = part.GetMaxDate(time);
var num = _.GetRightDay(time.getDate(), maxDate, time.getDay());
if (time.getDate() <= num && maxDate >= num) return num - time.getDate();else {
return maxDate - time.getDate() + _.GetRightDay(1, part.GetMaxDate(time.add('m', 1)), ((1 + maxDate - time.getDate() + time.getDay()) % 7 + 7) % 7);
}
}
}, {
key: 'partGetFirst',
value: function partGetFirst(time, part) {
return this.GetRightDay(time.getDate(), part.GetMaxDate(time), time.getDay()) - time.getDate();
}
}]);
return WCronNode;
}(CronNode);
/// <summary>
/// 处理最后几天,或者最后一个星期几的问题
/// </summary>
var LCronNode = function (_CronNode5) {
(0, _inherits3.default)(LCronNode, _CronNode5);
function LCronNode(num, par, part) {
(0, _classCallCheck3.default)(this, LCronNode);
var _this17 = (0, _possibleConstructorReturn3.default)(this, (LCronNode.__proto__ || (0, _getPrototypeOf2.default)(LCronNode)).call(this, "\\d*L", par, part));
var _pri31 = pri(_this17, {
GetMaxDay: function GetMaxDay(time, part) {
if (part.name == 'WeekDateTimePart') return new Date(time.getFullYear(), time.getMonth() + 1, 1).add('d', -1).getDate();else return part.GetMaxDate(time);
}
}),
_ = _pri31._,
__ = _pri31.__;
_.l = 0;
if (num.length > 1) _.l = parseInt(num.substr(0, num.length - 1));
if (part.name == 'WeekDateTimePart' && _.l > 0) {
_.l--;
}
return _this17;
}
/// <summary>
/// 得到l日附近的工作日是几号
/// </summary>
/// <param name="time"></param>
/// <param name="weekDay"></param>
/// <returns></returns>
(0, _createClass3.default)(LCronNode, [{
key: 'GetRightDay',
value: function GetRightDay(time, part) {
var _pri32 = pri(this),
_ = _pri32._,
__ = _pri32.__;
if (part.name == 'WeekDateTimePart') {
var last = __.GetMaxDay(time, part);
//得到最后一天是星期几
var lastDay = ((last - time.getDate() + time.getDay()) % 7 + 7) % 7;
return last + _.l - lastDay - (_.l < lastDay ? 0 : 7);
} else return part.GetMaxDate(time) - _.l;
}
}, {
key: 'partRegen',
value: function partRegen(time, part) {
var _pri33 = pri(this),
_ = _pri33._,
__ = _pri33.__;
var maxDate = __.GetMaxDay(time, part);
var num = _.GetRightDay(time, part);
if (time.getDate() <= num && maxDate >= num) return num - time.getDate();else return maxDate - time.getDate() + _.GetRightDay(time.add('m', 1), part);
}
}, {
key: 'partGetFirst',
value: function partGetFirst(time, part) {
var _pri34 = pri(this),
_ = _pri34._,
__ = _pri34.__;
var maxDate = __.GetMaxDay(time, part);
var num = _.GetRightDay(time, part);
if (time.getDate() <= num && maxDate >= num) return time.getDate() - num;else return maxDate - time.getDate() + _.GetRightDay(time.add('m', 1), part);
}
}]);
return LCronNode;
}(CronNode);
/// <summary>
/// 处理几号以后 或者星期几以后
/// </summary>
var CCronNode = function (_CommonCronNode6) {
(0, _inherits3.default)(CCronNode, _CommonCronNode6);
function CCronNode(num, par, part) {
(0, _classCallCheck3.default)(this, CCronNode);
var _this18 = (0, _possibleConstructorReturn3.default)(this, (CCronNode.__proto__ || (0, _getPrototypeOf2.default)(CCronNode)).call(this, "\\d+C", par, part));
var _pri35 = pri(_this18),
_ = _pri35._,
__ = _pri35.__;
_.l = 0;
if (num.length > 1) _.l = parseInt(num.substr(0, num.length - 1));
if (part.name == 'WeekDateTimePart') {
_.l--;
}
return _this18;
}
(0, _createClass3.default)(CCronNode, [{
key: 'DayRegen',
value: function DayRegen(time, maxDate, nextMaxDate) {
var _pri36 = pri(this),
_ = _pri36._,
__ = _pri36.__;
if (time >= _.l) return 0;else return _.l - time + (_.l > maxDate ? maxDate : 0);
}
}, {
key: 'DayGetFirst',
value: function DayGetFirst(time, maxDate, nextMaxDate) {
var _pri37 = pri(this),
_ = _pri37._,
__ = _pri37.__;
return _.l - time;
}
}, {
key: 'Regen',
value: function Regen(time, maxDate) {
var _pri38 = pri(this),
_ = _pri38._,
__ = _pri38.__;
if (time >= _.l) return 0;else return _.l - time;
}
}, {
key: 'GetFirst',
value: function GetFirst(time, maxDate) {
var _pri39 = pri(this),
_ = _pri39._,
__ = _pri39.__;
return _.l - time;
}
}]);
return CCronNode;
}(CommonCronNode);
var RegExpS = [new RegExp(_tool2.default.format("(^\\*$)|(^{data}([-/]{data})?$)|(^{data}(,{data})+$)", { data: "[1-5]?[0-9]" }), 'i'), new RegExp(_tool2.default.format("(^\\*$)|(^{data}([-/]{data})?$)|(^{data}(,{data})+$)", { data: "[1-5]?[0-9]" }), 'i'), new RegExp(_tool2.default.format("(^\\*$)|(^{data}([-/]{data})?$)|(^{data}(,{data})+$)", { data: "[1-2]?[0-9]" }), 'i'), new RegExp(_tool2.default.format("(^[\\*\\?]$)|(^{data}([-/]{data})?$)|(^{data}?[LWC]$)|(^{data}(,{data})+$)|(^LW$)", { data: "[1-3]?[0-9]" }), 'i'), new RegExp(_tool2.default.format("(^\\*$)|(^{data}([-/]{data})?$)|(^{data}(,{data})+$)", { data: "1?[0-9]" }), 'i'), new RegExp(_tool2.default.format("(^[\\*\\?]$)|(^{data}([-/#]{data})?$)|(^{data}?[LC]$)|(^{data}(,{data})+$)", { data: "[1-7]" }), 'i'), new RegExp(_tool2.default.format("(^\\*$)|(^{data}([-/]{data})?$)|(^{data}(,{data})+$)", { data: "[0-9]{4}" }), 'i')];
var FIELDLIMIT = [[0, 59], [0, 59], [0, 23], [1, 31], [1, 12], [1, 7], [1, 9999]];
var PARTS = [new SecondDateTimePart(), new MinuteDateTimePart(), new HourDateTimePart(), new DayDateTimePart(), new WeekDateTimePart(), new MonthDateTimePart(), new YearDateTimePart()];
var TYPES = [XCronNode, QCronNode, NCronNode, DCronNode, SCronNode, PCronNode, ACronNode, WCronNode, LCronNode, CCronNode];
var CRONRegExp = [new RegExp("^\\*$", 'gi'), new RegExp("^\\?$", 'gi'), new RegExp("^\\d+$", 'gi'), new RegExp("^\\d+[,\\d+]+$", 'gi'), new RegExp("^\\d+-\\d+$", 'gi'), new RegExp("^\\d+/\\d+$", 'gi'), new RegExp("^[1-7]#[1-5]$", 'gi'), new RegExp("^(\\d+|L)W$", 'gi'), new RegExp("^\\d*L$", 'gi'), new RegExp("^\\d+C$", 'gi')];
var CreateCronNode = function CreateCronNode(text, node, part) {
for (var w = 0; w < CRONRegExp.length; w++) {
CRONRegExp[w].lastIndex = 0; //每次调用test回调指针
if (CRONRegExp[w].test(text) ? true : false) return _tool2.default.create2(TYPES[w], [text, node, part]);
}
throw new Error(text + "没有找到合适的表示式元素!");
};
var NUMRegExp = new RegExp("\\d+", 'g');
var MatchCronExpression = function MatchCronExpression(text) {
for (var w = 0; w < 7; w++) {
if (!RegExpS[w].test(text[w])) throw new Error(_tool2.default.format("第{id}项不符合要求:{desc}", { id: w + 1, desc: text[w] }));
var matchs = text[w].match(NUMRegExp) || [];
for (var i = 0; i < matchs.length; i++) {
var num = parseInt(matchs[i]);
if (!(FIELDLIMIT[w][0] <= num & FIELDLIMIT[w][1] >= num)) throw new Error(_tool2.default.format("第{id}项超出范围:{desc}", { id: w + 1, desc: text[w] }));
}
}
return true;
};
/**
* 使用require('cron-parser')进行克隆表达式封装
* @param {*} 克隆表达式
* @param {*} 当前时间
*/
var Cron = exports.Cron = function () {
function Cron(expression) {
(0, _classCallCheck3.default)(this, Cron);
var _pri40 = pri(this, { nodes: null }),
_ = _pri40._,
__ = _pri40.__;
expression = expression.trim();
if (expression.split(' ').length < 7) expression += " *";
var exp = expression.toUpperCase().split(' ');
MatchCronExpression(exp);
//替换月与星期的位置 理顺嵌套关系!
var _t = exp[5];
exp[5] = exp[4];
exp[4] = _t;
for (var w = 6; w >= 0; w--) {
__.nodes = CreateCronNode(exp[w], __.nodes, PARTS[w]);
}
}
/*
*(^\*$)|(^[1-5]?[0-9]([-/][1-5]?[0-9])?$)|(^[1-5]?[0-9](,[1-5]?[0-9])+$)
(^\*$)|(^[1-5]?[0-9]([-/][1-5]?[0-9])?$)|(^[1-5]?[0-9](,[1-5]?[0-9])+$)
(^\*$)|(^[1-2]?[0-9]([-/][1-2]?[0-9])?$)|(^[1-2]?[0-9](,[1-2]?[0-9])+$)
(^[\*\?]$)|(^[1-3]?[0-9]([-/][1-3]?[0-9])?$)|(^[1-3]?[0-9]?[LWC]$)|(^[1-3]?[0-9](,[1-3]?[0-9])+$)
(^\*$)|(^1?[0-9]([-/]1?[0-9])?$)|(^1?[0-9](,1?[0-9])+$)
(^[\*\?]$)|(^[1-7]([-/#][1-7])?$)|(^[1-7]?[LC]$)|(^[1-7](,[1-7])+$)
(^\*$)|(^[0-9]{4}([-/][0-9]{4})?$)|(^[0-9]{4}(,[0-9]{4})+$)
FieldName = new String[] { "秒", "分", "小时", "日期", "月", "星期", "年" };
*/
(0, _createClass3.default)(Cron, [{
key: 'next',
value: function next() {
var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();
var _pri41 = pri(this),
_ = _pri41._,
__ = _pri41.__;
var container = new DateTimeContainer();
container.SetDateTime(time.add('s', 1));
while (__.nodes.Next(container)) {}
return container.GetDateTime();
}
}]);
return Cron;
}();
exports.default = { Cron: Cron };
var pri = _tool2.default.pris();
//# sourceMappingURL=cron.js.map