時(shí)序下進(jìn)出記錄匹配說(shuō)明
需求說(shuō)明
一個(gè)人至少管理1個(gè)工地;每天至少要去一個(gè)自己管理的工地凫海;該人員沒(méi)有固定上下班時(shí)間;統(tǒng)計(jì)一個(gè)人的月度工地出勤績(jī)效情況。???
績(jī)效考核標(biāo)準(zhǔn):
?????? (1)每天工地工作時(shí)長(zhǎng)不小于m小時(shí)混聊,則達(dá)標(biāo);
?????? (2)每個(gè)月所有工地工作時(shí)長(zhǎng)總和不小于n天乾巧,則達(dá)標(biāo)句喜;
?????? (3)每月該人管理的所有工地都有出勤記錄的才達(dá)標(biāo),有工地未出勤的績(jī)效不達(dá)標(biāo)沟于;
?????? (4)只有滿足上述條件的績(jī)效才達(dá)標(biāo)藤滥;否則,不達(dá)標(biāo)社裆。
其中拙绊,夜班加班的分割處理,分割部分計(jì)入當(dāng)天統(tǒng)計(jì)泳秀。
現(xiàn)只能通過(guò)提供的進(jìn)出記錄标沪,判斷月度出勤績(jī)效情況。
問(wèn)題描述
硬件上報(bào)讀卡進(jìn)出記錄的問(wèn)題說(shuō)明:
?????? c-1.進(jìn)或者出記錄的時(shí)間時(shí)長(zhǎng)問(wèn)題:若人員經(jīng)電感線圈激活卡片嗜傅,但在該激活區(qū)域停留了一段時(shí)間金句,這種情況下的時(shí)間是哪一個(gè)?
?????? c-2.硬件設(shè)備如何保證按照時(shí)間順序進(jìn)出記錄完整匹配的情況吕嘀?
?????? c-3.假如無(wú)法保證時(shí)序下數(shù)據(jù)的完整性违寞,是否可以降低不完整的情況,少量數(shù)據(jù)異常標(biāo)識(shí)處理偶房?
?????? ??? 時(shí)序下的進(jìn)出記錄隊(duì)列可能情況很多趁曼,這里羅列部分:
????????????? 偶數(shù)隊(duì)列長(zhǎng)度情況,
????????????? (1)進(jìn)出進(jìn)出進(jìn)出
????????????? (2)出進(jìn)出進(jìn)出進(jìn)
????????????? (3)出出進(jìn)出進(jìn)進(jìn)
????????????? (4)進(jìn)進(jìn)出出進(jìn)出
????????????? 奇數(shù)隊(duì)列長(zhǎng)度情況棕洋,
????????????? (1)進(jìn)出進(jìn)出進(jìn)出進(jìn)
????????????? (2)出進(jìn)出進(jìn)出進(jìn)出
????????????? (3)出出進(jìn)進(jìn)出進(jìn)進(jìn)
????????????? (4)進(jìn)進(jìn)出出進(jìn)出出
? 這樣的組合太多挡闰,不再一一羅列,如果上述無(wú)法保證時(shí)序下數(shù)據(jù)完整匹配的情況,則考核的報(bào)表無(wú)法保證真實(shí)可靠性摄悯。
問(wèn)題分析
要解決上述需求赞季,必須要匹配下列要素。
(1)? ? 月度時(shí)序奢驯;
(2)? ? 日期匹配申钩;
(3)? ? 項(xiàng)目地人員、日期匹配瘪阁;
(4)? ? 項(xiàng)目地進(jìn)出記錄匹配典蜕;
月度時(shí)序問(wèn)題
假如,某人某天未去他管理的項(xiàng)目地罗洗,則無(wú)進(jìn)出記錄愉舔,在sql 后,查詢不到該天日期伙菜,會(huì)造成該月日期中斷轩缤。
怎么解決因查詢無(wú)進(jìn)出記錄造成的月日期時(shí)序中斷的情況?
a.???存儲(chǔ)過(guò)程調(diào)用
這里不再贅述贩绕。
b.???sql變量控制
指定數(shù)據(jù)條數(shù)火的,生成連續(xù)的數(shù)字或日期。
涉及到的知識(shí)點(diǎn)是變量淑倾,DATE_SUB(),DATE_FORMAT().使用以上方法的好處就是不用創(chuàng)建存儲(chǔ)過(guò)程馏鹤,也不涉及到任何表。缺點(diǎn)就是數(shù)據(jù)的條數(shù)控制并不靈活娇哆,不能和用戶之間形成互動(dòng)湃累,即不能自定義日期區(qū)間,只能控制數(shù)據(jù)條數(shù)碍讨。
c.??利用現(xiàn)有含日期時(shí)間的表
要求是這個(gè)表中的數(shù)據(jù)足夠龐大治力,好處是不涉及存儲(chǔ)過(guò)程,不涉及變量勃黍,且能自定義日期區(qū)間宵统。
綜合考慮,使用存儲(chǔ)過(guò)程調(diào)用覆获。
mysql 存儲(chǔ)過(guò)程調(diào)用
可以理解為建立標(biāo)準(zhǔn)日期時(shí)間表马澈。
step1.創(chuàng)建存儲(chǔ)過(guò)程
CREATE PROCEDURE createDate()
BEGIN
?????? DECLAREindexdate DATE;
?????? setindexdate = DATE('2019-01-01');
WHILE indexdate<=DATE('2020-01-01')
? DO
???????????????????? INSERTinto? ts_date(date) VALUES(indexdate);
???????????????????? setindexdate = ADDDATE(indexdate,1);
end WHILE;
END;
Step2.存儲(chǔ)過(guò)程調(diào)用
CALL createDate();
日期匹配問(wèn)題
這里可以這么處理
(1)? ?根據(jù)月度時(shí)序中的表來(lái)補(bǔ)全日期,
(2)? ?再根據(jù)日期來(lái)查詢進(jìn)出記錄弄息,
(3)? ?根據(jù)卡號(hào)過(guò)濾人員痊班,
(4)? ?根據(jù)記錄中的處理機(jī)設(shè)備編號(hào)來(lái)區(qū)分項(xiàng)目地。
這里就不存在問(wèn)題了疑枯。
項(xiàng)目地匹配問(wèn)題
設(shè)備和項(xiàng)目地綁定辩块,這里可以這樣處理
(1)? ? 根據(jù)處理機(jī)設(shè)備來(lái)區(qū)分項(xiàng)目地
(2)? ? 根據(jù)記錄中上報(bào)的卡號(hào)識(shí)別人員信息
這里也不存在問(wèn)題。
項(xiàng)目地進(jìn)出記錄匹配問(wèn)題
上報(bào)數(shù)據(jù)中有時(shí)間荆永、人員卡號(hào)废亭、處理機(jī)編號(hào)、進(jìn)出狀態(tài)標(biāo)識(shí)具钥,滿足匹配條件豆村。
但是,因?yàn)橐馔庠斐傻倪M(jìn)出記錄不匹配骂删,會(huì)對(duì)報(bào)表統(tǒng)計(jì)造成致命錯(cuò)誤掌动。
因此這里重點(diǎn)說(shuō)明下因?yàn)楫惓T斐傻臄?shù)據(jù)匹配問(wèn)題。
匹配模式
正常的匹配模式有下列幾種:
1.? ? ABAB
2.? ? BABA
3.? ? ABABA
4.? ? BABAB
5.? ? A
6.? ? B
其它的均為異常情況宁玫;
基于此粗恢,提供基本匹配算法。
基本思路:
(1)? ?匹配要素為A(進(jìn))B(出)
(2)? ?根據(jù)需要匹配的數(shù)據(jù)長(zhǎng)度構(gòu)造上述6種匹配模式下的正確匹配數(shù)據(jù)組
(3)? ?篩選符合條件的數(shù)據(jù)欧瘪,重組新的數(shù)據(jù)組并標(biāo)識(shí)不匹配的數(shù)據(jù)到源數(shù)據(jù)組
構(gòu)造匹配數(shù)據(jù)組方法如下:
構(gòu)建滿足匹配模式的數(shù)據(jù)并標(biāo)識(shí)原始數(shù)據(jù)匹配情況的方法如下:
上述完成后眷射,只需要解決數(shù)據(jù)的重發(fā)問(wèn)題即可。
(1)? ? 數(shù)據(jù)重發(fā)問(wèn)題佛掖,需要根據(jù)實(shí)際設(shè)備驗(yàn)證妖碉。
(2)? ? 跨多天工作的情況:實(shí)際情況下會(huì)很少發(fā)生,上述計(jì)算時(shí)長(zhǎng)均分割到當(dāng)天和前天芥被,這樣理論上會(huì)造成實(shí)際時(shí)長(zhǎng)缺失欧宜。建議配合提供管理制度解決。