#TIMEJOB#

作者: e43ef8a56980 | 来源:发表于2019-08-15 11:57 被阅读0次
def getDataFromCsv(empNum):
    result = []
    try:
        strList = []
        with open('data.csv', encoding='gb2312') as f: 
            strList = f.readlines()
    except IOError:
        print("没有找到CSV文件或读取文件失败, 获取CSV数据步骤跳过")
        return result
    
    del strList[0]
    for line in strList:
        items = line.split(",")
        if items[0] == empNum:      
            result.append({
                "date":items[1], 
                "hours": str.strip(items[2])
            })
        
    if len(result) == 0:
        print("\n未找您到当月的数据")
        return result

    print("\n读取CSV数据完毕,数据如下")
    for item in result:
        print("日期:" + str(item["date"]) + " 工时: " + str(item["hours"]) + " h")

    print()
    return result

#print(getDataFromCsv("E00010678811"))
    
# coding=utf-8
import urllib.request, urllib.parse, urllib.error
import http.cookiejar
import json
import re

URL_INNER = "http://timesheetv2.paic.com.cn/timesheet/login?loginType=login"
URL_EX = "http://timesheetv2.paic.com.cn/timesheet/j_security_check"

URL_ROOT = ""

inner = ""
while True:
    print("\n您是否为内部员工?(Y/N)")
    inner="N"
    break

print("\n请输入UM账号:")
userName = "ex-wangyuzhen002"

print("\n请输入UM密码:")
password = "PUBLIc@1991"

if inner == "Y" or inner == "y":
    URL_ROOT = URL_INNER
else:
    URL_ROOT = URL_EX

values = {
    'j_username': userName, 
    'j_password': password,
    'SMAUTHREASON': '0'
}

print("登录开始...")

print("登录请求发送...")

postdata = urllib.parse.urlencode(values).encode()
user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
headers = {'User-Agent': user_agent}
cookie_filename = 'cookie.txt'

cookie = http.cookiejar.LWPCookieJar(cookie_filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
request = urllib.request.Request(URL_ROOT, postdata, headers)

try:
    response = opener.open(request).read().decode('gbk')
    # 匹配错误信息
    rex = r"errorMsg = (.+);"
    searchObj = re.search(rex, response, re.M)
    if hasattr(searchObj,'group') :
        raise RuntimeError(searchObj.group(1))
    print("登录成功")
except urllib.error.URLError as e:
    print(e.reason)
    raise RuntimeError("登录失败")

print("保存COOKIE...")
cookie.save(ignore_discard=True, ignore_expires=True) # 保存cookie到cookie.txt中
print("登录完毕.")

import login
import start

def getItemRex(itemName):
    return r"name=\"projectWorkTimes\[\d+\]." + itemName + "\".+value=\"(?P<" + itemName + ">[^\"]*)\".+"

def getProjectIdRex():
    return r"value=\"(?P<projectId>[^\"]*)\" selected"
    
def getNameValueRex(itemName):
    return r"name=\"" + itemName + "\".+value=\"(?P<" + itemName + ">[^\"]*)\""
import webClient
import re
import rexManager

def getWorkTime(startDate, endDate):

    url = 'http://timesheetv2.paic.com.cn/timesheet/querySheetPersonal.do' 

    data = {
        "start_date" : startDate,
        "start_date_bak" : startDate,
        "end_date" : endDate,
        "server_proj" : "on",
        "server_non_proj" : "on",
        "non_server" : "on",
        "server_projn" : "serverProj",
        "server_non_projn" : "serverNonProj",
        "work_hour_status" : "all",
        "unconfirm" : "on",
        "confirmed" : "on",
        "unconfirmn" : "0",
        "confirmedn" : "1",
        "untreadn" : "1",
        "confirme_status" : "all",
        "taskOwner" : "",
        "customerID" : "",
        "taskId" : "",
        "serviceId" : ""
    }

    result = webClient.sendPostForm(url, data)

    rex = r"(?P<date>\d\d\d\d-\d\d-\d\d).+【.+服务工时:(?P<workTime>\d+.\d+)h.+考勤有效工时:(?P<realWorkTime>[^h]+)h?).+】"
    pattern = re.compile(rex)
    matchs = pattern.finditer(result) 

    result = []
    for match in matchs:
        item = {}
        if re.match("\d+\.\d+", match["realWorkTime"]) != None:
            item = match.groupdict()
        else:
            if match["realWorkTime"].find("待同步"):
                item = {
                    "date" : match["date"],
                    "workTime" : match["workTime"],
                    "realWorkTime" : "待同步",
                }
            else:
                item = {
                    "date" : match["date"],
                    "workTime" : match["workTime"],
                    "realWorkTime" : "未知(请登录系统查看)",
                }
        result.append(item)        
        print(item["date"] + ": 服务工时 [" + item["workTime"] + "] 有效工时 [" + item["realWorkTime"] +"]")
    
    return result

def saveMatchs(result, matchs):
    for index, match in enumerate(matchs):
        result[index].update(match.groupdict().items())

def queryModifyData(startDate, endDate):
    url = "http://timesheetv2.paic.com.cn/timesheet/modifySheet.do?start_date=" + startDate + "&end_date=" + endDate
    text = webClient.sendGet(url)
    propertyNames = ["serviceNo" , "statusT" , "workDate" , "costHours"]
    result = []

    pattern = re.compile(rexManager.getProjectIdRex())
    matchs = pattern.finditer(text)
    for match in matchs:
        result.append(match.groupdict())

    for item in propertyNames:
        pattern = re.compile(rexManager.getItemRex(item))
        matchs = pattern.finditer(text)
        saveMatchs(result, matchs)
    
    return result

def querydepartmentId(startDate, endDate):
    url = "http://timesheetv2.paic.com.cn/timesheet/modifySheet.do?start_date=" + startDate + "&end_date=" + endDate
    text = webClient.sendGet(url)
    pattern = re.compile(rexManager.getNameValueRex("departmentId"))
    result = pattern.findall(text)[0]
    return 

def queryEmpNum(startDate, endDate):
    url = "http://timesheetv2.paic.com.cn/timesheet/modifySheet.do?start_date=" + startDate + "&end_date=" + endDate
    text = webClient.sendGet(url)
    pattern = re.compile(rexManager.getNameValueRex("empNum"))
    result = pattern.findall(text)[0]
    return result

def submit(modifyData, startDate, endDate, departmentId):
    print("正在提交数据...")
    
    data = {}

    for i in range(len(modifyData)):
        for key,value in modifyData[i].items():
            data["projectWorkTimes[" + str(i) + "]." + key] = value;
    
    data["beginDate"] = startDate
    data["endDate"] = endDate
    data["isEditTimeSheet"] = "Y"
    data["projsNum"] = "0"
    data["departmentId"] = departmentId;

    url = "http://timesheetv2.paic.com.cn/timesheet/modifySheet.do"
    
    result = webClient.sendPostForm(url, data)
    
    if result.find("操作成功") == -1 :
        raise RuntimeError("提交失败")

    print("修改完成")

#print(querydepartmentId("2018-11-01","2018-11-21"))
#print(getWorkTime("2018-11-01","2018-11-21"))
#print(queryModifyData("2018-11-01","2018-11-21"))

import service
import re
import timeUtil
import csvLoader


print("\n请手动登录日报系统,批量创建日报,完毕后按按回车键继续")
input()

print("设置开始时间:" + timeUtil.getStartDate())
print("设置结束时间:" + timeUtil.getEndDate())

departmentId = service.querydepartmentId(timeUtil.getStartDate(), timeUtil.getEndDate())
print("唯一部门Id:" + departmentId)
empNum = service.queryEmpNum(timeUtil.getStartDate(), timeUtil.getEndDate())
print("员工E代码:" + str(empNum))


print("\n若您有本月工时的CSV文件,请拷贝到当前目录下,并命名为data.csv。若没有,可以忽略。操作完毕后,按回车键继续")
input()

print("开始查询日报系统的填写情况...")

csvData = csvLoader.getDataFromCsv(empNum)
csvDataDict = {}

for item in csvData:
    csvDataDict[item["date"]] = item

workTimeData = service.getWorkTime(timeUtil.getStartDate(), timeUtil.getEndDate())

print("查询到填写的日报共" + str(len(workTimeData)) + "条")

if len(workTimeData) == 0:
    raise RuntimeError("未查询到日报,请登录日报系统创建")

workTimeDict = {}

for item in workTimeData:
    workTimeDict[item["date"]] = item

modfiyData = service.queryModifyData(timeUtil.getStartDate(), timeUtil.getEndDate())

for item in modfiyData:
    if re.match("\d+.\d+", workTimeDict[item["workDate"]]["realWorkTime"]):
        item["costHours"] = workTimeDict[item["workDate"]]["realWorkTime"]
    else:
        if item["workDate"] in csvDataDict.keys() :
            print("加载csv数据: 日期" + csvDataDict[item["workDate"]]["date"] + " 工时 " + csvDataDict[item["workDate"]]["hours"])
            item["costHours"] = csvDataDict[item["workDate"]]["hours"]

service.submit(modfiyData, timeUtil.getStartDate(), timeUtil.getEndDate(), departmentId)

if len(csvData) > 0:
    print("开始提交csv数据..")

print()

print("复查开始...")

workTimeData = service.getWorkTime(timeUtil.getStartDate(), timeUtil.getEndDate())

print("复查完毕.")

for item in workTimeData:
    if re.match("\d+.\d+", item["workTime"]):
        if float(item["workTime"]) < 7.58 :
            print("注意!您有小于7.58的数据, 建议到系统内核对.")

print("\n程序执行完毕,按任意键结束^_^")
input()

import datetime

def getStartDate():
    now = datetime.datetime.now()
    time = datetime.datetime.strptime(str(now.year) + "-" + str(now.month) + "-" + "1", "%Y-%m-%d")
    return time.strftime("%Y-%m-%d")

def getEndDate():
    now = datetime.datetime.now()
    # 计算下个月第一天
    month = now.month
    year = now.year
    if month == 12:
        month = 0
        year = year + 1
    futureMouthFirstDay = datetime.datetime.strptime(str(year) + "-" + str(month + 1) + "-" + "01", "%Y-%m-%d")
    # 当月最后一天
    lastDay = futureMouthFirstDay - datetime.timedelta(days=1)

    time = datetime.datetime.strptime(str(lastDay.year) + "-" + str(lastDay.month) + "-" + str(lastDay.day), "%Y-%m-%d")
    return time.strftime("%Y-%m-%d")
import urllib.request
import json
import http.cookiejar

print("加载COOKIE...")
filename = 'cookie.txt'
cookie = http.cookiejar.LWPCookieJar()
cookie.load(filename, ignore_discard=True, ignore_expires=True)
handler= urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
print("完毕.")

def sendPostForm(url, data):
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }   
    encodeData = urllib.parse.urlencode(data).encode('utf-8')
    request = urllib.request.Request(url, encodeData, headers)
    result = opener.open(request).read().decode('gbk')
    return result

def sendGet(url):
    request = urllib.request.Request(url)
    result = opener.open(request).read().decode('gbk')
    return result
    


def getDataFromCsv(empNum):
    result = []
    try:
        strList = []
        with open('data.csv', encoding='gb2312') as f: 
            strList = f.readlines()
    except IOError:
        print("没有找到CSV文件或读取文件失败, 获取CSV数据步骤跳过")
        return result
    
    del strList[0]
    for line in strList:
        items = line.split(",")
        if items[0] == empNum:      
            result.append({
                "date":items[1], 
                "hours": str.strip(items[2])
            })
        
    if len(result) == 0:
        print("\n未找您到当月的数据")
        return result

    print("\n读取CSV数据完毕,数据如下")
    for item in result:
        print("日期:" + str(item["date"]) + " 工时: " + str(item["hours"]) + " h")

    print()
    return result

#print(getDataFromCsv("E00010678811"))
    
# coding=utf-8
import urllib.request, urllib.parse, urllib.error
import http.cookiejar
import json
import re

URL_INNER = "http://timesheetv2.paic.com.cn/timesheet/login?loginType=login"
URL_EX = "http://timesheetv2.paic.com.cn/timesheet/j_security_check"

URL_ROOT = ""

inner = ""
while True:
    print("\n您是否为内部员工?(Y/N)")
    inner="N"
    break

print("\n请输入UM账号:")
userName = 

print("\n请输入UM密码:")
password = 

if inner == "Y" or inner == "y":
    URL_ROOT = URL_INNER
else:
    URL_ROOT = URL_EX

values = {
    'j_username': userName, 
    'j_password': password,
    'SMAUTHREASON': '0'
}

print("登录开始...")

print("登录请求发送...")

postdata = urllib.parse.urlencode(values).encode()
user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
headers = {'User-Agent': user_agent}
cookie_filename = 'cookie.txt'

cookie = http.cookiejar.LWPCookieJar(cookie_filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
request = urllib.request.Request(URL_ROOT, postdata, headers)

try:
    response = opener.open(request).read().decode('gbk')
    # 匹配错误信息
    rex = r"errorMsg = (.+);"
    searchObj = re.search(rex, response, re.M)
    if hasattr(searchObj,'group') :
        raise RuntimeError(searchObj.group(1))
    print("登录成功")
except urllib.error.URLError as e:
    print(e.reason)
    raise RuntimeError("登录失败")

print("保存COOKIE...")
cookie.save(ignore_discard=True, ignore_expires=True) # 保存cookie到cookie.txt中
print("登录完毕.")

import login
import start

def getItemRex(itemName):
    return r"name=\"projectWorkTimes\[\d+\]." + itemName + "\".+value=\"(?P<" + itemName + ">[^\"]*)\".+"

def getProjectIdRex():
    return r"value=\"(?P<projectId>[^\"]*)\" selected"
    
def getNameValueRex(itemName):
    return r"name=\"" + itemName + "\".+value=\"(?P<" + itemName + ">[^\"]*)\""
import webClient
import re
import rexManager

def getWorkTime(startDate, endDate):

    url = 'http://timesheetv2.paic.com.cn/timesheet/querySheetPersonal.do' 

    data = {
        "start_date" : startDate,
        "start_date_bak" : startDate,
        "end_date" : endDate,
        "server_proj" : "on",
        "server_non_proj" : "on",
        "non_server" : "on",
        "server_projn" : "serverProj",
        "server_non_projn" : "serverNonProj",
        "work_hour_status" : "all",
        "unconfirm" : "on",
        "confirmed" : "on",
        "unconfirmn" : "0",
        "confirmedn" : "1",
        "untreadn" : "1",
        "confirme_status" : "all",
        "taskOwner" : "",
        "customerID" : "",
        "taskId" : "",
        "serviceId" : ""
    }

    result = webClient.sendPostForm(url, data)

    rex = r"(?P<date>\d\d\d\d-\d\d-\d\d).+【.+服务工时:(?P<workTime>\d+.\d+)h.+考勤有效工时:(?P<realWorkTime>[^h]+)h?).+】"
    pattern = re.compile(rex)
    matchs = pattern.finditer(result) 

    result = []
    for match in matchs:
        item = {}
        if re.match("\d+\.\d+", match["realWorkTime"]) != None:
            item = match.groupdict()
        else:
            if match["realWorkTime"].find("待同步"):
                item = {
                    "date" : match["date"],
                    "workTime" : match["workTime"],
                    "realWorkTime" : "待同步",
                }
            else:
                item = {
                    "date" : match["date"],
                    "workTime" : match["workTime"],
                    "realWorkTime" : "未知(请登录系统查看)",
                }
        result.append(item)        
        print(item["date"] + ": 服务工时 [" + item["workTime"] + "] 有效工时 [" + item["realWorkTime"] +"]")
    
    return result

def saveMatchs(result, matchs):
    for index, match in enumerate(matchs):
        result[index].update(match.groupdict().items())

def queryModifyData(startDate, endDate):
    url = "http://timesheetv2.paic.com.cn/timesheet/modifySheet.do?start_date=" + startDate + "&end_date=" + endDate
    text = webClient.sendGet(url)
    propertyNames = ["serviceNo" , "statusT" , "workDate" , "costHours"]
    result = []

    pattern = re.compile(rexManager.getProjectIdRex())
    matchs = pattern.finditer(text)
    for match in matchs:
        result.append(match.groupdict())

    for item in propertyNames:
        pattern = re.compile(rexManager.getItemRex(item))
        matchs = pattern.finditer(text)
        saveMatchs(result, matchs)
    
    return result

def querydepartmentId(startDate, endDate):
    url = "http://timesheetv2.paic.com.cn/timesheet/modifySheet.do?start_date=" + startDate + "&end_date=" + endDate
    text = webClient.sendGet(url)
    pattern = re.compile(rexManager.getNameValueRex("departmentId"))
    result = pattern.findall(text)[0]
    return result

def queryEmpNum(startDate, endDate):
    url = "http://timesheetv2.paic.com.cn/timesheet/modifySheet.do?start_date=" + startDate + "&end_date=" + endDate
    text = webClient.sendGet(url)
    pattern = re.compile(rexManager.getNameValueRex("empNum"))
    result = pattern.findall(text)[0]
    return result

def submit(modifyData, startDate, endDate, departmentId):
    print("正在提交数据...")
    
    data = {}

    for i in range(len(modifyData)):
        for key,value in modifyData[i].items():
            data["projectWorkTimes[" + str(i) + "]." + key] = value;
    
    data["beginDate"] = startDate
    data["endDate"] = endDate
    data["isEditTimeSheet"] = "Y"
    data["projsNum"] = "0"
    data["departmentId"] = departmentId;

    url = "http://timesheetv2.paic.com.cn/timesheet/modifySheet.do"
    
    result = webClient.sendPostForm(url, data)
    
    if result.find("操作成功") == -1 :
        raise RuntimeError("提交失败")

    print("修改完成")

#print(querydepartmentId("2018-11-01","2018-11-21"))
#print(getWorkTime("2018-11-01","2018-11-21"))
#print(queryModifyData("2018-11-01","2018-11-21"))

import service
import re
import timeUtil
import csvLoader


print("\n请手动登录日报系统,批量创建日报,完毕后按按回车键继续")
input()

print("设置开始时间:" + timeUtil.getStartDate())
print("设置结束时间:" + timeUtil.getEndDate())

departmentId = service.querydepartmentId(timeUtil.getStartDate(), timeUtil.getEndDate())
print("唯一部门Id:" + departmentId)
empNum = service.queryEmpNum(timeUtil.getStartDate(), timeUtil.getEndDate())
print("员工E代码:" + str(empNum))


print("\n若您有本月工时的CSV文件,请拷贝到当前目录下,并命名为data.csv。若没有,可以忽略。操作完毕后,按回车键继续")
input()

print("开始查询日报系统的填写情况...")

csvData = csvLoader.getDataFromCsv(empNum)
csvDataDict = {}

for item in csvData:
    csvDataDict[item["date"]] = item

workTimeData = service.getWorkTime(timeUtil.getStartDate(), timeUtil.getEndDate())

print("查询到填写的日报共" + str(len(workTimeData)) + "条")

if len(workTimeData) == 0:
    raise RuntimeError("未查询到日报,请登录日报系统创建")

workTimeDict = {}

for item in workTimeData:
    workTimeDict[item["date"]] = item

modfiyData = service.queryModifyData(timeUtil.getStartDate(), timeUtil.getEndDate())

for item in modfiyData:
    if re.match("\d+.\d+", workTimeDict[item["workDate"]]["realWorkTime"]):
        item["costHours"] = workTimeDict[item["workDate"]]["realWorkTime"]
    else:
        if item["workDate"] in csvDataDict.keys() :
            print("加载csv数据: 日期" + csvDataDict[item["workDate"]]["date"] + " 工时 " + csvDataDict[item["workDate"]]["hours"])
            item["costHours"] = csvDataDict[item["workDate"]]["hours"]

service.submit(modfiyData, timeUtil.getStartDate(), timeUtil.getEndDate(), departmentId)

if len(csvData) > 0:
    print("开始提交csv数据..")

print()

print("复查开始...")

workTimeData = service.getWorkTime(timeUtil.getStartDate(), timeUtil.getEndDate())

print("复查完毕.")

for item in workTimeData:
    if re.match("\d+.\d+", item["workTime"]):
        if float(item["workTime"]) < 7.58 :
            print("注意!您有小于7.58的数据, 建议到系统内核对.")

print("\n程序执行完毕,按任意键结束^_^")
input()

import datetime

def getStartDate():
    now = datetime.datetime.now()
    time = datetime.datetime.strptime(str(now.year) + "-" + str(now.month) + "-" + "1", "%Y-%m-%d")
    return time.strftime("%Y-%m-%d")

def getEndDate():
    now = datetime.datetime.now()
    # 计算下个月第一天
    month = now.month
    year = now.year
    if month == 12:
        month = 0
        year = year + 1
    futureMouthFirstDay = datetime.datetime.strptime(str(year) + "-" + str(month + 1) + "-" + "01", "%Y-%m-%d")
    # 当月最后一天
    lastDay = futureMouthFirstDay - datetime.timedelta(days=1)

    time = datetime.datetime.strptime(str(lastDay.year) + "-" + str(lastDay.month) + "-" + str(lastDay.day), "%Y-%m-%d")
    return time.strftime("%Y-%m-%d")
import urllib.request
import json
import http.cookiejar

print("加载COOKIE...")
filename = 'cookie.txt'
cookie = http.cookiejar.LWPCookieJar()
cookie.load(filename, ignore_discard=True, ignore_expires=True)
handler= urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
print("完毕.")

def sendPostForm(url, data):
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }   
    encodeData = urllib.parse.urlencode(data).encode('utf-8')
    request = urllib.request.Request(url, encodeData, headers)
    result = opener.open(request).read().decode('gbk')
    return result

def sendGet(url):
    request = urllib.request.Request(url)
    result = opener.open(request).read().decode('gbk')
    return result
    


def getDataFromCsv(empNum):
    result = []
    try:
        strList = []
 ~~~python

相关文章

网友评论

      本文标题:#TIMEJOB#

      本文链接:https://www.haomeiwen.com/subject/wvzajctx.html