调试绑定文件夹的功能,可以调整输出文件的命名方式

This commit is contained in:
luoliangyi 2022-06-13 12:02:51 +08:00
parent ba76ed3c09
commit a8bed1c462
5 changed files with 106 additions and 63 deletions

View File

@ -147,6 +147,8 @@ namespace ver_2
m_bindFolder.clear(); m_bindFolder.clear();
m_bindNameMode.clear(); m_bindNameMode.clear();
m_bindNameWidth = 0;
m_bindNameBase = 0;
} }
ManagerV2::~ManagerV2() ManagerV2::~ManagerV2()
@ -1131,7 +1133,7 @@ namespace ver_2
m_currBatchId = batchId; m_currBatchId = batchId;
if (!m_bindFolder.empty()) if (!m_bindFolder.empty())
{ {
ClearBindFolderImageList(); ClearBindFolder();
UpdateBindFolder(); UpdateBindFolder();
} }
} }
@ -1190,7 +1192,7 @@ namespace ver_2
m_currBatchId = batchId; m_currBatchId = batchId;
if (!m_bindFolder.empty()) if (!m_bindFolder.empty())
{ {
ClearBindFolderImageList(); ClearBindFolder();
UpdateBindFolder(); UpdateBindFolder();
} }
@ -1236,12 +1238,12 @@ namespace ver_2
return 0; return 0;
} }
int ManagerV2::BindFolder(const std::string& folder, const std::string& nameMode, std::string& errInfo) int ManagerV2::BindFolder(const std::string& folder, const std::string& nameMode, int nameWidth, int nameBase, std::string& errInfo)
{ {
errInfo = "错误"; errInfo = "错误";
if (folder.empty()) if (folder.empty())
return -1; return -1;
if ("index" != nameMode) if ("order" != nameMode || nameWidth <= 0 || nameBase < 0)
return -1; return -1;
// 需要保证文件夹为空?? // 需要保证文件夹为空??
@ -1255,8 +1257,10 @@ namespace ver_2
HGBase_StandardiseFileName(m_bindFolder.c_str(), stdBindFolder, 256); HGBase_StandardiseFileName(m_bindFolder.c_str(), stdBindFolder, 256);
m_bindFolder = stdBindFolder; m_bindFolder = stdBindFolder;
m_bindNameMode = nameMode; m_bindNameMode = nameMode;
m_bindNameWidth = nameWidth;
m_bindNameBase = nameBase;
ClearBindFolderImageList(); ClearBindFolder();
UpdateBindFolder(); UpdateBindFolder();
errInfo.clear(); errInfo.clear();
@ -1272,6 +1276,8 @@ namespace ver_2
m_bindFolder.clear(); m_bindFolder.clear();
m_bindNameMode.clear(); m_bindNameMode.clear();
m_bindNameWidth = 0;
m_bindNameBase = 0;
errInfo.clear(); errInfo.clear();
return 0; return 0;
} }
@ -1779,6 +1785,9 @@ namespace ver_2
if (NULL == m_sqlite) if (NULL == m_sqlite)
return -1; return -1;
std::vector<BatchTableInfo> tables;
GetBatchTableInfo(tables);
char sql[256]; char sql[256];
sprintf(sql, "delete from 'table_%s'", m_currBatchId.c_str()); sprintf(sql, "delete from 'table_%s'", m_currBatchId.c_str());
int ret = sqlite3_exec(m_sqlite, sql, NULL, NULL, NULL); int ret = sqlite3_exec(m_sqlite, sql, NULL, NULL, NULL);
@ -1786,7 +1795,7 @@ namespace ver_2
if (!m_bindFolder.empty()) if (!m_bindFolder.empty())
{ {
ClearBindFolderImageList(); ClearBindFolderImageList(tables);
} }
errInfo.clear(); errInfo.clear();
@ -2055,13 +2064,7 @@ namespace ver_2
if (!m_bindFolder.empty()) if (!m_bindFolder.empty())
{ {
for (int i = 0; i < (int)tables.size(); ++i) ClearBindFolderImageList(tables);
{
char fileName[256];
sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx, tables[i].format.c_str());
HGBase_DeleteFile(fileName);
}
UpdateBindFolder(); UpdateBindFolder();
} }
@ -2157,13 +2160,7 @@ namespace ver_2
if (!m_bindFolder.empty()) if (!m_bindFolder.empty())
{ {
for (int i = 0; i < (int)tables.size(); ++i) ClearBindFolderImageList(tables);
{
char fileName[256];
sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx, tables[i].format.c_str());
HGBase_DeleteFile(fileName);
}
UpdateBindFolder(); UpdateBindFolder();
} }
@ -3424,6 +3421,32 @@ namespace ver_2
std::sort(tables.begin(), tables.end(), BatchTableSort); std::sort(tables.begin(), tables.end(), BatchTableSort);
} }
void ManagerV2::ClearBindFolder()
{
assert(!m_bindFolder.empty());
char szFind[MAX_PATH];
sprintf(szFind, "%s*.*", m_bindFolder.c_str());
WIN32_FIND_DATAA FindFileData;
HANDLE hFind = FindFirstFileA(szFind, &FindFileData);
if (INVALID_HANDLE_VALUE == hFind)
return;
do
{
if (0 == (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
char fileName[MAX_PATH];
sprintf(fileName, "%s%s", m_bindFolder.c_str(), FindFileData.cFileName);
HGBase_DeleteFile(fileName);
}
} while (FindNextFileA(hFind, &FindFileData));
FindClose(hFind);
}
void ManagerV2::UpdateBindFolder() void ManagerV2::UpdateBindFolder()
{ {
assert(!m_bindFolder.empty()); assert(!m_bindFolder.empty());
@ -3445,8 +3468,10 @@ namespace ver_2
const void* imgData = sqlite3_column_blob(stmt, 4); const void* imgData = sqlite3_column_blob(stmt, 4);
int imgSize = sqlite3_column_bytes(stmt, 4); int imgSize = sqlite3_column_bytes(stmt, 4);
char fmt[24];
sprintf(fmt, "%%s%%0%dd.%%s", m_bindNameWidth);
char imagePath[256]; char imagePath[256];
sprintf(imagePath, "%s%d.%s", m_bindFolder.c_str(), idx, imgFmt.c_str()); sprintf(imagePath, fmt, m_bindFolder.c_str(), m_bindNameBase + idx, imgFmt.c_str());
HGBase_CreateDir(m_bindFolder.c_str()); HGBase_CreateDir(m_bindFolder.c_str());
SaveToFile((const HGByte*)imgData, imgSize, imagePath); SaveToFile((const HGByte*)imgData, imgSize, imagePath);
@ -3462,20 +3487,23 @@ namespace ver_2
{ {
assert(!m_bindFolder.empty()); assert(!m_bindFolder.empty());
char fmt[24];
sprintf(fmt, "%%s%%0%dd.%%s", m_bindNameWidth);
for (int i = (int)tables.size() - 1; i >= 0; --i) for (int i = (int)tables.size() - 1; i >= 0; --i)
{ {
if (tables[i].idx >= insertPos) if (tables[i].idx >= insertPos)
{ {
char fileName[256]; char fileName[256];
sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx, tables[i].format.c_str()); sprintf(fileName, fmt, m_bindFolder.c_str(), m_bindNameBase + tables[i].idx, tables[i].format.c_str());
char destName[256]; char destName[256];
sprintf(destName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx + 1, tables[i].format.c_str()); sprintf(destName, fmt, m_bindFolder.c_str(), m_bindNameBase + tables[i].idx + 1, tables[i].format.c_str());
MoveFileA(fileName, destName); MoveFileA(fileName, destName);
} }
} }
char fileName[256]; char fileName[256];
sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), insertPos, imgFmt.c_str()); sprintf(fileName, fmt, m_bindFolder.c_str(), m_bindNameBase + insertPos, imgFmt.c_str());
SaveToFile(imgData, imgSize, fileName); SaveToFile(imgData, imgSize, fileName);
} }
@ -3484,6 +3512,9 @@ namespace ver_2
{ {
assert(!m_bindFolder.empty()); assert(!m_bindFolder.empty());
char fmt[24];
sprintf(fmt, "%%s%%0%dd.%%s", m_bindNameWidth);
std::string oldFormat; std::string oldFormat;
for (int i = 0; i < (int)tables.size(); ++i) for (int i = 0; i < (int)tables.size(); ++i)
{ {
@ -3495,11 +3526,11 @@ namespace ver_2
} }
char oldFileName[256]; char oldFileName[256];
sprintf(oldFileName, "%s%d.%s", m_bindFolder.c_str(), imageIndex, oldFormat.c_str()); sprintf(oldFileName, fmt, m_bindFolder.c_str(), m_bindNameBase + imageIndex, oldFormat.c_str());
HGBase_DeleteFile(oldFileName); HGBase_DeleteFile(oldFileName);
char fileName[256]; char fileName[256];
sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), imageIndex, imgFmt.c_str()); sprintf(fileName, fmt, m_bindFolder.c_str(), m_bindNameBase + imageIndex, imgFmt.c_str());
SaveToFile(imgData, imgSize, fileName); SaveToFile(imgData, imgSize, fileName);
} }
@ -3507,6 +3538,9 @@ namespace ver_2
{ {
assert(!m_bindFolder.empty()); assert(!m_bindFolder.empty());
char fmt[24];
sprintf(fmt, "%%s%%0%dd.%%s", m_bindNameWidth);
for (int i = 0; i < (int)imageIndexList.size(); ++i) for (int i = 0; i < (int)imageIndexList.size(); ++i)
{ {
for (int j = 0; j < (int)tables.size(); ++j) for (int j = 0; j < (int)tables.size(); ++j)
@ -3514,7 +3548,7 @@ namespace ver_2
if (tables[j].idx == imageIndexList[i]) if (tables[j].idx == imageIndexList[i])
{ {
char fileName[256]; char fileName[256];
sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), tables[j].idx, tables[j].format.c_str()); sprintf(fileName, fmt, m_bindFolder.c_str(), m_bindNameBase + tables[j].idx, tables[j].format.c_str());
HGBase_DeleteFile(fileName); HGBase_DeleteFile(fileName);
break; break;
} }
@ -3543,9 +3577,9 @@ namespace ver_2
if (value > 0) if (value > 0)
{ {
char fileName[256]; char fileName[256];
sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx, tables[i].format.c_str()); sprintf(fileName, fmt, m_bindFolder.c_str(), m_bindNameBase + tables[i].idx, tables[i].format.c_str());
char destName[256]; char destName[256];
sprintf(destName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx - value, tables[i].format.c_str()); sprintf(destName, fmt, m_bindFolder.c_str(), m_bindNameBase + tables[i].idx - value, tables[i].format.c_str());
MoveFileA(fileName, destName); MoveFileA(fileName, destName);
} }
} }
@ -3556,6 +3590,9 @@ namespace ver_2
{ {
assert(!m_bindFolder.empty()); assert(!m_bindFolder.empty());
char fmt[24];
sprintf(fmt, "%%s%%0%dd.%%s", m_bindNameWidth);
std::string format1, format2; std::string format1, format2;
for (int i = 0; i < (int)tables.size(); ++i) for (int i = 0; i < (int)tables.size(); ++i)
@ -3567,46 +3604,35 @@ namespace ver_2
} }
char fileName1[256]; char fileName1[256];
sprintf(fileName1, "%s%d.%s", m_bindFolder.c_str(), imageIndex1, format1.c_str()); sprintf(fileName1, fmt, m_bindFolder.c_str(), m_bindNameBase + imageIndex1, format1.c_str());
char TmpFileName[256]; char TmpFileName[256];
sprintf(TmpFileName, "%sTemp", m_bindFolder.c_str()); sprintf(TmpFileName, "%sTemp", m_bindFolder.c_str());
MoveFileA(fileName1, TmpFileName); MoveFileA(fileName1, TmpFileName);
char fileName2[256]; char fileName2[256];
sprintf(fileName2, "%s%d.%s", m_bindFolder.c_str(), imageIndex2, format2.c_str()); sprintf(fileName2, fmt, m_bindFolder.c_str(), m_bindNameBase + imageIndex2, format2.c_str());
char fileName2Dest[256]; char fileName2Dest[256];
sprintf(fileName2Dest, "%s%d.%s", m_bindFolder.c_str(), imageIndex1, format2.c_str()); sprintf(fileName2Dest, fmt, m_bindFolder.c_str(), m_bindNameBase + imageIndex1, format2.c_str());
MoveFileA(fileName2, fileName2Dest); MoveFileA(fileName2, fileName2Dest);
char fileName1Dest[256]; char fileName1Dest[256];
sprintf(fileName1Dest, "%s%d.%s", m_bindFolder.c_str(), imageIndex2, format1.c_str()); sprintf(fileName1Dest, fmt, m_bindFolder.c_str(), m_bindNameBase + imageIndex2, format1.c_str());
MoveFileA(TmpFileName, fileName1Dest); MoveFileA(TmpFileName, fileName1Dest);
} }
void ManagerV2::ClearBindFolderImageList() void ManagerV2::ClearBindFolderImageList(const std::vector<BatchTableInfo>& tables)
{ {
assert(!m_bindFolder.empty()); assert(!m_bindFolder.empty());
char szFind[MAX_PATH]; char fmt[24];
sprintf(szFind, "%s*.*", m_bindFolder.c_str()); sprintf(fmt, "%%s%%0%dd.%%s", m_bindNameWidth);
WIN32_FIND_DATAA FindFileData; for (int i = 0; i < (int)tables.size(); ++i)
HANDLE hFind = FindFirstFileA(szFind, &FindFileData);
if (INVALID_HANDLE_VALUE == hFind)
return;
do
{ {
if (0 == (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) char fileName[256];
{ sprintf(fileName, fmt, m_bindFolder.c_str(), m_bindNameBase + tables[i].idx, tables[i].format.c_str());
char fileName[MAX_PATH]; HGBase_DeleteFile(fileName);
sprintf(fileName, "%s%s", m_bindFolder.c_str(), FindFileData.cFileName); }
HGBase_DeleteFile(fileName);
}
} while (FindNextFileA(hFind, &FindFileData));
FindClose(hFind);
} }
int ManagerV2::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param) int ManagerV2::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param)

View File

@ -270,7 +270,7 @@ namespace ver_2
// 修改批次号 // 修改批次号
int ModifyBatchId(const std::string& batchId, const std::string& newBatchId, std::string& errInfo); int ModifyBatchId(const std::string& batchId, const std::string& newBatchId, std::string& errInfo);
// 绑定文件夹 // 绑定文件夹
int BindFolder(const std::string &folder, const std::string &nameMode, std::string& errInfo); int BindFolder(const std::string &folder, const std::string &nameMode, int nameWidth, int nameBase, std::string& errInfo);
// 停止绑定文件夹 // 停止绑定文件夹
int StopBindFolder(std::string& errInfo); int StopBindFolder(std::string& errInfo);
// 加载图像缩略图列表 // 加载图像缩略图列表
@ -350,6 +350,7 @@ namespace ver_2
static bool SaveToBase64(const HGByte* data, HGUInt size, std::string& base64); static bool SaveToBase64(const HGByte* data, HGUInt size, std::string& base64);
static bool SaveToFile(const HGByte* data, HGUInt size, const std::string &filePath); static bool SaveToFile(const HGByte* data, HGUInt size, const std::string &filePath);
void GetBatchTableInfo(std::vector<BatchTableInfo>& tables); void GetBatchTableInfo(std::vector<BatchTableInfo>& tables);
void ClearBindFolder();
void UpdateBindFolder(); void UpdateBindFolder();
void InsertBindFolderImage(const std::vector<BatchTableInfo>& tables, int insertPos, const std::string imgFmt, void InsertBindFolderImage(const std::vector<BatchTableInfo>& tables, int insertPos, const std::string imgFmt,
const HGByte *imgData, HGUInt imgSize); const HGByte *imgData, HGUInt imgSize);
@ -357,7 +358,7 @@ namespace ver_2
const HGByte* imgData, HGUInt imgSize); const HGByte* imgData, HGUInt imgSize);
void DeleteBindFolderImage(const std::vector<BatchTableInfo>& tables, const std::vector<int>& imageIndexList); void DeleteBindFolderImage(const std::vector<BatchTableInfo>& tables, const std::vector<int>& imageIndexList);
void ExchangeBindFolderImage(const std::vector<BatchTableInfo>& tables, int imageIndex1, int imageIndex2); void ExchangeBindFolderImage(const std::vector<BatchTableInfo>& tables, int imageIndex1, int imageIndex2);
void ClearBindFolderImageList(); void ClearBindFolderImageList(const std::vector<BatchTableInfo>& tables);
static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param); static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);
@ -384,5 +385,7 @@ namespace ver_2
std::string m_currBatchId; std::string m_currBatchId;
std::string m_bindFolder; std::string m_bindFolder;
std::string m_bindNameMode; std::string m_bindNameMode;
int m_bindNameWidth;
int m_bindNameBase;
}; };
} }

View File

@ -1693,7 +1693,7 @@ namespace ver_2
} }
} }
char resp[1024] = { 0 }; char* resp = new char[1024 + outZipBase64.size()];
if (0 != ret) if (0 != ret)
{ {
if (findIden) if (findIden)
@ -1722,6 +1722,7 @@ namespace ver_2
} }
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE); SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
delete[] resp;
} }
void WSUser::LocalImageDeskew(cJSON* json) void WSUser::LocalImageDeskew(cJSON* json)
@ -2829,10 +2830,18 @@ namespace ver_2
bool find = false; bool find = false;
std::string nameMode = GetJsonStringValue(json, "name_mode"); std::string nameMode = GetJsonStringValue(json, "name_mode");
if (!find) if (!find)
nameMode = "index"; nameMode = "order";
int nameWidth = GetJsonIntValue(json, "name_width", &find);
if (!find)
nameWidth = 1;
int nameBase = GetJsonIntValue(json, "name_base", &find);
if (!find)
nameBase = 0;
std::string errInfo; std::string errInfo;
int ret = GetManager()->BindFolder(folder, nameMode, errInfo); int ret = GetManager()->BindFolder(folder, nameMode, nameWidth, nameBase, errInfo);
bool findIden = false; bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden); std::string iden = GetJsonStringValue(json, "iden", &findIden);
@ -3917,7 +3926,7 @@ namespace ver_2
} }
} }
char resp[1024] = { 0 }; char* resp = new char[1024 + outZipBase64.size()];
if (0 != ret) if (0 != ret)
{ {
if (findIden) if (findIden)
@ -3946,6 +3955,7 @@ namespace ver_2
} }
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE); SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
delete[] resp;
} }
void WSUser::ImageDeskew(cJSON* json) void WSUser::ImageDeskew(cJSON* json)

View File

@ -340,7 +340,8 @@
{ {
socket.send(JSON.stringify({ socket.send(JSON.stringify({
'func':'local_make_zip_file', 'func':'local_make_zip_file',
'file_path_list':['D:\\1.jpg','D:\\2.jpg'] 'file_path_list':['D:\\1.jpg','D:\\2.jpg'],
'get_base64':true
})); }));
} }
@ -485,7 +486,9 @@
{ {
socket.send(JSON.stringify({ socket.send(JSON.stringify({
'func':'bind_folder', 'func':'bind_folder',
'folder':'D:\\111' 'folder':'D:\\111',
'name_width':1,
'name_base':20
})); }));
} }
@ -596,7 +599,7 @@
{ {
socket.send(JSON.stringify({ socket.send(JSON.stringify({
'func':'merge_image', 'func':'merge_image',
'image_index_list':[0, 1, 2], 'image_index_list':[0, 1],
'mode':'horz', 'mode':'horz',
'align':'center', 'align':'center',
'interval':20, 'interval':20,
@ -608,7 +611,7 @@
{ {
socket.send(JSON.stringify({ socket.send(JSON.stringify({
'func':'make_multi_image', 'func':'make_multi_image',
'image_index_list':[0, 1, 2], 'image_index_list':[0, 1],
'format':'tif', 'format':'tif',
'tiff_compression':'jpeg', 'tiff_compression':'jpeg',
'tiff_jpeg_quality':60, 'tiff_jpeg_quality':60,
@ -631,7 +634,8 @@
{ {
socket.send(JSON.stringify({ socket.send(JSON.stringify({
'func':'make_zip_file', 'func':'make_zip_file',
'image_index_list':[0, 1, 2] 'image_index_list':[0, 1],
'get_base64':true
})); }));
} }