Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gic-store
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
base_platform_enterprise
gic-store
Commits
67eb3624
Commit
67eb3624
authored
Aug 07, 2020
by
zhiwj
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'developer' into 'master'
Developer See merge request
!31
parents
3c5a9dd1
aaf17695
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
122 additions
and
45 deletions
+122
-45
ClerkTmpDTO.java
...tore-api/src/main/java/com/gic/store/dto/ClerkTmpDTO.java
+21
-0
StoreApiService.java
.../src/main/java/com/gic/store/service/StoreApiService.java
+1
-1
TabStoreInfoMapper.java
...ain/java/com/gic/store/dao/mapper/TabStoreInfoMapper.java
+1
-1
TabClerkTmp.java
...rvice/src/main/java/com/gic/store/entity/TabClerkTmp.java
+14
-1
StoreService.java
...ice/src/main/java/com/gic/store/service/StoreService.java
+1
-1
StoreServiceImpl.java
...ain/java/com/gic/store/service/impl/StoreServiceImpl.java
+2
-2
ClerkTaskServiceImpl.java
...om/gic/store/service/outer/impl/ClerkTaskServiceImpl.java
+12
-2
StoreApiServiceImpl.java
...com/gic/store/service/outer/impl/StoreApiServiceImpl.java
+2
-2
TabClerkMapper.xml
...tore-service/src/main/resources/mapper/TabClerkMapper.xml
+3
-0
TabClerkTmpMapper.xml
...e-service/src/main/resources/mapper/TabClerkTmpMapper.xml
+26
-15
TabStoreInfoMapper.xml
...-service/src/main/resources/mapper/TabStoreInfoMapper.xml
+1
-0
ClerkImportController.java
...a/com/gic/store/web/controller/ClerkImportController.java
+38
-20
clerk_batch_import.xlsx
...tore-web/src/main/resources/excel/clerk_batch_import.xlsx
+0
-0
No files found.
gic-store-api/src/main/java/com/gic/store/dto/ClerkTmpDTO.java
View file @
67eb3624
...
...
@@ -20,6 +20,11 @@ public class ClerkTmpDTO implements Serializable {
*/
private
Integer
enterpriseId
;
private
String
regionId
;
/**
* 门店域
*/
private
String
regionName
;
/**
* 导购id
*/
...
...
@@ -210,4 +215,20 @@ public class ClerkTmpDTO implements Serializable {
public
void
setClerkType
(
String
clerkType
)
{
this
.
clerkType
=
clerkType
;
}
public
String
getRegionId
()
{
return
regionId
;
}
public
void
setRegionId
(
String
regionId
)
{
this
.
regionId
=
regionId
;
}
public
String
getRegionName
()
{
return
regionName
;
}
public
void
setRegionName
(
String
regionName
)
{
this
.
regionName
=
regionName
;
}
}
gic-store-api/src/main/java/com/gic/store/service/StoreApiService.java
View file @
67eb3624
...
...
@@ -191,7 +191,7 @@ public interface StoreApiService {
* @return com.gic.api.base.commons.ServiceResponse<com.gic.store.dto.StoreDTO>
* @throws
*/
ServiceResponse
<
StoreDTO
>
getByStoreNameAndStoreCode
(
Integer
enterpriseId
,
String
storeName
,
String
storeCode
);
ServiceResponse
<
StoreDTO
>
getByStoreNameAndStoreCode
(
Integer
enterpriseId
,
Integer
regionId
,
String
storeName
,
String
storeCode
);
/**
* @Title: addStoreToIndex
...
...
gic-store-service/src/main/java/com/gic/store/dao/mapper/TabStoreInfoMapper.java
View file @
67eb3624
...
...
@@ -81,7 +81,7 @@ public interface TabStoreInfoMapper {
int
updateStoreBrandBystoreInfoIds
(
@Param
(
"enterpriseId"
)
Integer
enterpriseId
,
@Param
(
"value"
)
String
value
,
@Param
(
"storeInfoIdList"
)
List
<
Integer
>
storeInfoIdList
);
StoreDTO
getByStoreNameAndStoreCode
(
@Param
(
"enterpriseId"
)
Integer
enterpriseId
,
@Param
(
"storeName"
)
String
storeName
,
@Param
(
"storeCode"
)
String
storeCode
);
StoreDTO
getByStoreNameAndStoreCode
(
@Param
(
"enterpriseId"
)
Integer
enterpriseId
,
@Param
(
"regionId"
)
Integer
regionId
,
@Param
(
"storeName"
)
String
storeName
,
@Param
(
"storeCode"
)
String
storeCode
);
List
<
Integer
>
listAllstoreInfoId
(
@Param
(
"enterpriseId"
)
Integer
enterpriseId
);
...
...
gic-store-service/src/main/java/com/gic/store/entity/TabClerkTmp.java
View file @
67eb3624
...
...
@@ -17,7 +17,12 @@ public class TabClerkTmp {
private
Integer
enterpriseId
;
/**
* 导购id
* 门店域
*/
private
String
regionName
;
/**
* 导购name
*/
private
String
clerkName
;
...
...
@@ -102,6 +107,14 @@ public class TabClerkTmp {
this
.
enterpriseId
=
enterpriseId
;
}
public
String
getRegionName
()
{
return
regionName
;
}
public
void
setRegionName
(
String
regionName
)
{
this
.
regionName
=
regionName
;
}
public
String
getClerkName
()
{
return
clerkName
;
}
...
...
gic-store-service/src/main/java/com/gic/store/service/StoreService.java
View file @
67eb3624
...
...
@@ -82,7 +82,7 @@ public interface StoreService {
int
bulkUpdateStoreGroup
(
String
storeInfoIds
,
Integer
enterpriseId
,
Integer
value
);
StoreDTO
getByStoreNameAndStoreCode
(
Integer
enterpriseId
,
String
storeName
,
String
storeCode
);
StoreDTO
getByStoreNameAndStoreCode
(
Integer
enterpriseId
,
Integer
regionId
,
String
storeName
,
String
storeCode
);
List
<
Integer
>
listAllStoreId
(
Integer
enterpriseId
);
...
...
gic-store-service/src/main/java/com/gic/store/service/impl/StoreServiceImpl.java
View file @
67eb3624
...
...
@@ -379,8 +379,8 @@ public class StoreServiceImpl implements StoreService {
}
@Override
public
StoreDTO
getByStoreNameAndStoreCode
(
Integer
enterpriseId
,
String
storeName
,
String
storeCode
)
{
return
this
.
tabStoreInfoMapper
.
getByStoreNameAndStoreCode
(
enterpriseId
,
storeName
,
storeCode
);
public
StoreDTO
getByStoreNameAndStoreCode
(
Integer
enterpriseId
,
Integer
regionId
,
String
storeName
,
String
storeCode
)
{
return
this
.
tabStoreInfoMapper
.
getByStoreNameAndStoreCode
(
enterpriseId
,
regionId
,
storeName
,
storeCode
);
}
@Override
...
...
gic-store-service/src/main/java/com/gic/store/service/outer/impl/ClerkTaskServiceImpl.java
View file @
67eb3624
...
...
@@ -6,6 +6,7 @@ import com.gic.store.constant.*;
import
com.gic.store.dto.ClerkDTO
;
import
com.gic.store.dto.ClerkTmpDTO
;
import
com.gic.store.dto.StoreDTO
;
import
com.gic.store.dto.StoreRegionDTO
;
import
com.gic.store.entity.TabClerkPosition
;
import
com.gic.store.entity.TabClerkTmp
;
import
com.gic.store.service.*
;
...
...
@@ -39,6 +40,8 @@ public class ClerkTaskServiceImpl extends AbstractTaskAllocationOperation implem
private
StoreService
storeService
;
@Autowired
private
ClerkPositionService
clerkPositionService
;
@Autowired
private
StoreRegionService
storeRegionService
;
@Override
public
String
importDataToClerk
(
Integer
enterpriseId
,
String
userId
,
String
uuId
)
{
...
...
@@ -85,7 +88,15 @@ public class ClerkTaskServiceImpl extends AbstractTaskAllocationOperation implem
}
private
void
importDataToStore
(
ClerkTmpDTO
t
)
{
StoreDTO
store
=
storeService
.
getByStoreNameAndStoreCode
(
t
.
getEnterpriseId
(),
t
.
getStoreName
(),
t
.
getStoreCode
());
StoreRegionDTO
region
=
storeRegionService
.
getStoreRegionByRegionName
(
t
.
getEnterpriseId
(),
t
.
getRegionName
());
if
(
region
==
null
)
{
t
.
setErrorMessage
(
"对应的门店域不存在"
);
clerkImportService
.
updateData
(
t
);
return
;
}
StoreDTO
store
=
storeService
.
getByStoreNameAndStoreCode
(
t
.
getEnterpriseId
(),
region
.
getRegionId
(),
t
.
getStoreName
(),
t
.
getStoreCode
());
if
(
store
==
null
)
{
t
.
setErrorMessage
(
"对应的门店不存在"
);
clerkImportService
.
updateData
(
t
);
...
...
@@ -111,7 +122,6 @@ public class ClerkTaskServiceImpl extends AbstractTaskAllocationOperation implem
clerkDTO
.
setClerkGender
(
GenderEnum
.
parseMessage
(
t
.
getClerkGender
().
trim
()).
getCode
());
clerkDTO
.
setNationcode
(
t
.
getNationcode
().
trim
());
clerkDTO
.
setPhoneNumber
(
t
.
getPhoneNumber
().
trim
());
clerkDTO
.
setPositionId
(
position
.
getClerkPositionId
());
clerkDTO
.
setPositionName
(
t
.
getPositionName
().
trim
());
...
...
gic-store-service/src/main/java/com/gic/store/service/outer/impl/StoreApiServiceImpl.java
View file @
67eb3624
...
...
@@ -1298,8 +1298,8 @@ public class StoreApiServiceImpl implements StoreApiService {
// }
@Override
public
ServiceResponse
<
StoreDTO
>
getByStoreNameAndStoreCode
(
Integer
enterpriseId
,
String
storeName
,
String
storeCode
)
{
StoreDTO
store
=
this
.
storeService
.
getByStoreNameAndStoreCode
(
enterpriseId
,
storeName
,
storeCode
);
public
ServiceResponse
<
StoreDTO
>
getByStoreNameAndStoreCode
(
Integer
enterpriseId
,
Integer
regionId
,
String
storeName
,
String
storeCode
)
{
StoreDTO
store
=
this
.
storeService
.
getByStoreNameAndStoreCode
(
enterpriseId
,
regionId
,
storeName
,
storeCode
);
if
(
store
!=
null
)
{
return
ServiceResponse
.
success
(
EntityUtil
.
changeEntityByOrika
(
StoreDTO
.
class
,
store
));
}
else
{
...
...
gic-store-service/src/main/resources/mapper/TabClerkMapper.xml
View file @
67eb3624
...
...
@@ -48,6 +48,9 @@
)
</insert>
<insert
id=
"insertSelective"
parameterType=
"com.gic.store.entity.TabClerk"
>
<selectKey
keyProperty=
"clerkId"
order=
"AFTER"
resultType=
"java.lang.Integer"
>
SELECT LAST_INSERT_ID()
</selectKey>
insert into tab_clerk
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"clerkId != null"
>
...
...
gic-store-service/src/main/resources/mapper/TabClerkTmpMapper.xml
View file @
67eb3624
...
...
@@ -4,6 +4,7 @@
<resultMap
id=
"BaseResultMap"
type=
"com.gic.store.entity.TabClerkTmp"
>
<id
column=
"clerk_tmp_id"
jdbcType=
"INTEGER"
property=
"clerkTmpId"
/>
<result
column=
"enterprise_id"
jdbcType=
"INTEGER"
property=
"enterpriseId"
/>
<result
column=
"region_name"
jdbcType=
"VARCHAR"
property=
"regionName"
/>
<result
column=
"clerk_name"
jdbcType=
"VARCHAR"
property=
"clerkName"
/>
<result
column=
"clerk_code"
jdbcType=
"VARCHAR"
property=
"clerkCode"
/>
<result
column=
"store_name"
jdbcType=
"VARCHAR"
property=
"storeName"
/>
...
...
@@ -20,9 +21,9 @@
<result
column=
"operator_name"
jdbcType=
"VARCHAR"
property=
"operatorName"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
clerk_tmp_id, enterprise_id,
clerk_name, clerk_code, store_name, store_code, position_nam
e,
clerk_gender, nationcode, phone_number, create_time, update_time, error_messag
e,
sign_key, operator_id, operator_name
clerk_tmp_id, enterprise_id,
region_name, clerk_name, clerk_code, store_name, store_cod
e,
position_name, clerk_gender, nationcode, phone_number, create_time, update_tim
e,
error_message,
sign_key, operator_id, operator_name
</sql>
<select
id=
"selectByPrimaryKey"
parameterType=
"java.lang.Integer"
resultMap=
"BaseResultMap"
>
select
...
...
@@ -35,18 +36,18 @@
where clerk_tmp_id = #{clerkTmpId,jdbcType=INTEGER}
</delete>
<insert
id=
"insert"
parameterType=
"com.gic.store.entity.TabClerkTmp"
>
insert into tab_clerk_tmp (clerk_tmp_id, enterprise_id,
clerk
_name,
clerk_
code, store_name, store_cod
e,
position_name, clerk_gender, nationcode
,
phone_number, create_time, upd
ate_time,
error_message, sign_key, operator_id
,
operator_name)
values (#{clerkTmpId,jdbcType=INTEGER}, #{enterpriseId,jdbcType=INTEGER}, #{
clerk
Name,jdbcType=VARCHAR},
#{clerk
Code,jdbcType=VARCHAR}, #{storeName,jdbcType=VARCHAR}, #{storeCod
e,jdbcType=VARCHAR},
#{
positionName,jdbcType=VARCHAR}, #{clerkGender,jdbcType=VARCHAR}, #{nationcode
,jdbcType=VARCHAR},
#{
phoneNumber,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{upd
ateTime,jdbcType=TIMESTAMP},
#{
errorMessage,jdbcType=VARCHAR}, #{signKey,jdbcType=VARCHAR}, #{operatorId,jdbcType=INTEGE
R},
#{operatorName,jdbcType=VARCHAR})
insert into tab_clerk_tmp (clerk_tmp_id, enterprise_id,
region
_name,
clerk_
name, clerk_code, store_nam
e,
store_code, position_name, clerk_gender
,
nationcode, phone_number, cre
ate_time,
update_time, error_message, sign_key
,
operator_
id, operator_
name)
values (#{clerkTmpId,jdbcType=INTEGER}, #{enterpriseId,jdbcType=INTEGER}, #{
region
Name,jdbcType=VARCHAR},
#{clerk
Name,jdbcType=VARCHAR}, #{clerkCode,jdbcType=VARCHAR}, #{storeNam
e,jdbcType=VARCHAR},
#{
storeCode,jdbcType=VARCHAR}, #{positionName,jdbcType=VARCHAR}, #{clerkGender
,jdbcType=VARCHAR},
#{
nationcode,jdbcType=VARCHAR}, #{phoneNumber,jdbcType=VARCHAR}, #{cre
ateTime,jdbcType=TIMESTAMP},
#{
updateTime,jdbcType=TIMESTAMP}, #{errorMessage,jdbcType=VARCHAR}, #{signKey,jdbcType=VARCHA
R},
#{operator
Id,jdbcType=INTEGER}, #{operator
Name,jdbcType=VARCHAR})
</insert>
<insert
id=
"insertSelective"
parameterType=
"com.gic.store.entity.TabClerkTmp"
>
insert into tab_clerk_tmp
...
...
@@ -57,6 +58,9 @@
<if
test=
"enterpriseId != null"
>
enterprise_id,
</if>
<if
test=
"regionName != null"
>
region_name,
</if>
<if
test=
"clerkName != null"
>
clerk_name,
</if>
...
...
@@ -107,6 +111,9 @@
<if
test=
"enterpriseId != null"
>
#{enterpriseId,jdbcType=INTEGER},
</if>
<if
test=
"regionName != null"
>
#{regionName,jdbcType=VARCHAR},
</if>
<if
test=
"clerkName != null"
>
#{clerkName,jdbcType=VARCHAR},
</if>
...
...
@@ -157,6 +164,9 @@
<if
test=
"enterpriseId != null"
>
enterprise_id = #{enterpriseId,jdbcType=INTEGER},
</if>
<if
test=
"regionName != null"
>
region_name = #{regionName,jdbcType=VARCHAR},
</if>
<if
test=
"clerkName != null"
>
clerk_name = #{clerkName,jdbcType=VARCHAR},
</if>
...
...
@@ -205,6 +215,7 @@
<update
id=
"updateByPrimaryKey"
parameterType=
"com.gic.store.entity.TabClerkTmp"
>
update tab_clerk_tmp
set enterprise_id = #{enterpriseId,jdbcType=INTEGER},
region_name = #{regionName,jdbcType=VARCHAR},
clerk_name = #{clerkName,jdbcType=VARCHAR},
clerk_code = #{clerkCode,jdbcType=VARCHAR},
store_name = #{storeName,jdbcType=VARCHAR},
...
...
gic-store-service/src/main/resources/mapper/TabStoreInfoMapper.xml
View file @
67eb3624
...
...
@@ -476,6 +476,7 @@
</include>
from tab_store_info t1, tab_store t2
where t2.enterprise_id = #{enterpriseId} and t1.store_info_id=t2.store_info_id
and t1.region_id = #{regionId}
and t1.store_name = #{storeName}
and t1.store_code = #{storeCode}
</select>
...
...
gic-store-web/src/main/java/com/gic/store/web/controller/ClerkImportController.java
View file @
67eb3624
...
...
@@ -10,14 +10,8 @@ import com.gic.store.constant.Constants;
import
com.gic.store.constant.GenderEnum
;
import
com.gic.store.constant.StoreImportEnum
;
import
com.gic.store.constant.StoreOwnTypeEnum
;
import
com.gic.store.dto.ClerkPositionDTO
;
import
com.gic.store.dto.ClerkTmpDTO
;
import
com.gic.store.dto.GicDictDTO
;
import
com.gic.store.dto.StoreDTO
;
import
com.gic.store.service.ClerkImportApiService
;
import
com.gic.store.service.ClerkPositionApiService
;
import
com.gic.store.service.DictApiService
;
import
com.gic.store.service.StoreApiService
;
import
com.gic.store.dto.*
;
import
com.gic.store.service.*
;
import
com.gic.store.web.qo.PageQO
;
import
com.gic.store.web.utils.ExcelUtils
;
import
org.apache.commons.collections.CollectionUtils
;
...
...
@@ -56,6 +50,8 @@ public class ClerkImportController {
private
DictApiService
dictApiService
;
@Autowired
private
ClerkPositionApiService
clerkPositionApiService
;
@Autowired
private
StoreRegionApiService
storeRegionApiService
;
/**
* 下载模板
...
...
@@ -125,7 +121,7 @@ public class ClerkImportController {
try
{
Workbook
workbook
=
ExcelUtils
.
getWorkbookFromUpload
(
file
.
getInputStream
(),
fileName
);
List
<
Map
<
Integer
,
String
>>
data
=
ExcelUtils
.
readExcel
(
6
,
fileName
.
substring
(
fileName
.
lastIndexOf
(
"."
)
+
1
),
workbook
,
null
);
if
(
CollectionUtils
.
isNotEmpty
(
data
)
&&
data
.
get
(
0
).
size
()
!=
9
)
{
if
(
CollectionUtils
.
isNotEmpty
(
data
)
&&
data
.
get
(
0
).
size
()
!=
10
)
{
return
RestResponse
.
failure
(
ErrorCode
.
OPERATION_FAILED
.
getCode
(),
"总列数与模板不一致"
);
}
clerkImportApiService
.
delClerkTmp
(
enterpriseId
);
...
...
@@ -292,8 +288,33 @@ public class ClerkImportController {
validate
=
false
;
}
}
// 门店域
String
regionName
=
row
.
get
(
3
);
if
(
validate
)
{
if
(
StringUtils
.
isBlank
(
regionName
))
{
bean
.
setErrorMessage
(
"门店域不能为空"
);
validate
=
false
;
}
}
regionName
=
regionName
.
trim
();
bean
.
setRegionName
(
regionName
);
if
(
validate
)
{
if
(
this
.
lengthValidate
(
regionName
,
20
))
{
bean
.
setErrorMessage
(
"门店域超过20个字"
);
validate
=
false
;
}
}
StoreRegionDTO
regionDTO
=
storeRegionApiService
.
getStoreRegionByRegionName
(
enterpriseId
,
regionName
).
getResult
();
if
(
validate
)
{
if
(
regionDTO
==
null
)
{
bean
.
setErrorMessage
(
"门店域不存在"
);
validate
=
false
;
}
}
// 验证门店name
String
storeName
=
row
.
get
(
3
);
String
storeName
=
row
.
get
(
4
);
if
(
validate
)
{
if
(
StringUtils
.
isBlank
(
storeName
))
{
bean
.
setErrorMessage
(
"门店名不能为空"
);
...
...
@@ -309,7 +330,7 @@ public class ClerkImportController {
}
}
// 验证门店code
String
storeCode
=
row
.
get
(
4
);
String
storeCode
=
row
.
get
(
5
);
if
(
validate
)
{
if
(
StringUtils
.
isBlank
(
storeCode
))
{
bean
.
setErrorMessage
(
"门店代码不能为空"
);
...
...
@@ -325,21 +346,18 @@ public class ClerkImportController {
}
}
// 验证门店是否存在
StoreDTO
storeDTO
=
storeApiService
.
getByStoreNameAndStoreCode
(
enterpriseId
,
storeName
,
storeCode
).
getResult
();
if
(
validate
)
{
StoreDTO
storeDTO
=
storeApiService
.
getByStoreNameAndStoreCode
(
enterpriseId
,
regionDTO
.
getRegionId
(),
storeName
,
storeCode
).
getResult
();
if
(
storeDTO
==
null
)
{
bean
.
setErrorMessage
(
"门店不存在"
);
validate
=
false
;
}
}
if
(
validate
)
{
if
(
StoreOwnTypeEnum
.
OWNER
.
getCode
()
!=
storeDTO
.
getOwnType
())
{
}
else
if
(
StoreOwnTypeEnum
.
OWNER
.
getCode
()
!=
storeDTO
.
getOwnType
())
{
bean
.
setErrorMessage
(
"不能在被授权门店下导入导购"
);
validate
=
false
;
}
}
// 验证岗位
String
positionName
=
row
.
get
(
5
);
String
positionName
=
row
.
get
(
6
);
if
(
validate
)
{
if
(
StringUtils
.
isNotBlank
(
positionName
)
&&
this
.
lengthValidate
(
storeCode
,
20
))
{
bean
.
setErrorMessage
(
"岗位超过20个字"
);
...
...
@@ -360,7 +378,7 @@ public class ClerkImportController {
bean
.
setPositionName
(
positionName
);
// 验证性别
String
gender
=
row
.
get
(
6
);
String
gender
=
row
.
get
(
7
);
bean
.
setClerkGender
(
gender
);
if
(
validate
)
{
if
(
StringUtils
.
isBlank
(
gender
))
{
...
...
@@ -375,7 +393,7 @@ public class ClerkImportController {
}
}
// 验证区号
String
nationcode
=
row
.
get
(
7
);
String
nationcode
=
row
.
get
(
8
);
if
(
StringUtils
.
isBlank
(
nationcode
))
{
nationcode
=
"+86"
;
}
...
...
@@ -397,7 +415,7 @@ public class ClerkImportController {
}
// 验证手机号
String
phoneNumber
=
row
.
get
(
8
);
String
phoneNumber
=
row
.
get
(
9
);
bean
.
setPhoneNumber
(
phoneNumber
);
if
(
validate
)
{
if
(
StringUtils
.
isBlank
(
phoneNumber
))
{
...
...
gic-store-web/src/main/resources/excel/clerk_batch_import.xlsx
View file @
67eb3624
No preview for this file type
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment