对接波司登二维码

master
LegnaYet 6 years ago
parent 9c71d104d7
commit 3d67816f26

@ -94,6 +94,10 @@ public class QrCodeDO {
* code * code
*/ */
private String staffCode; private String staffCode;
/**
*
*/
private String qrCode;
/** /**
* *
*/ */

@ -75,4 +75,13 @@ public class Constants {
// 人员状态 1 有效 2 无效 // 人员状态 1 有效 2 无效
public static final long STATUS_USEFUL = 1; public static final long STATUS_USEFUL = 1;
public static final long STATUS_UNUSEFUL = 2; public static final long STATUS_UNUSEFUL = 2;
/**
* type
*/
public static final String BSD_REQ_QRCODE_TYPE_STORE = "0";
/**
* type
*/
public static final String BSD_REQ_QRCODE_TYPE_SELLER = "1";
} }

@ -18,6 +18,10 @@ public class StoreUserDTO extends PoiStore{
* *
*/ */
private String cpUserId; private String cpUserId;
/**
* privilage_cp_user id
*/
private Long userId;
/** /**
* *
*/ */

@ -45,8 +45,7 @@ import java.util.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.kiisoo.ic.store.constant.Constants.TYPE_MANAGER; import static com.kiisoo.ic.store.constant.Constants.*;
import static com.kiisoo.ic.store.constant.Constants.TYPE_SELLER;
/** /**
* *
@ -63,6 +62,8 @@ public class PoiStoreStaffService {
@Autowired @Autowired
private PrivilageUserDOMapper privilageUserDOMapper; private PrivilageUserDOMapper privilageUserDOMapper;
@Autowired @Autowired
private StoreEmployeeService storeEmployeeService;
@Autowired
private PoiStoreDOMapper poiStoreDOMapper; private PoiStoreDOMapper poiStoreDOMapper;
@Autowired @Autowired
private PrivilageCpUserStoreDOMapper privilageCpUserStoreDOMapper; private PrivilageCpUserStoreDOMapper privilageCpUserStoreDOMapper;
@ -86,6 +87,8 @@ public class PoiStoreStaffService {
* @param shopId id * @param shopId id
*/ */
public IPage<PoiStoreStaffVO> getStaffByUserAndDate(int pageNum, int pageSize, Long shopId) { public IPage<PoiStoreStaffVO> getStaffByUserAndDate(int pageNum, int pageSize, Long shopId) {
String cpUserId = privilageCpUserStoreDOMapper.selectCpUserIdByStoreId(shopId);
PoiStore storeInfo = poiStoreDOMapper.selectById(shopId);
//根据店铺查询所有扫码客户信息 //根据店铺查询所有扫码客户信息
QueryWrapper<PoiStoreStaff> wrapper = new QueryWrapper<>(); QueryWrapper<PoiStoreStaff> wrapper = new QueryWrapper<>();
@ -111,6 +114,20 @@ public class PoiStoreStaffService {
poiStoreStaffVO.setName(privilageUserBean.getName()); poiStoreStaffVO.setName(privilageUserBean.getName());
poiStoreStaffVO.setMobil(privilageUserBean.getMobil()); poiStoreStaffVO.setMobil(privilageUserBean.getMobil());
} }
String epWechatQrCode = poiStoreStaffVO.getEpWechatQrCode();
if (StringUtils.isBlank(epWechatQrCode)){
try {
epWechatQrCode = storeEmployeeService.getQrCodeFromBSD(cpUserId,BSD_REQ_QRCODE_TYPE_SELLER,poiStoreStaffVO.getStaffCode(),storeInfo.getCode());
poiStoreStaffVO.setEpWechatQrCode(epWechatQrCode);
PoiStoreStaff update = new PoiStoreStaff();
update.setId(poiStoreStaffVO.getId());
update.setEpWechatQrCode(epWechatQrCode);
poiStoreStaffDOMapper.updateById(update);
} catch (Exception e) {
}
}
//店铺信息 //店铺信息
PoiStore poiStore = poiStoreDOMapper.selectById(poiStoreStaff.getStoreId()); PoiStore poiStore = poiStoreDOMapper.selectById(poiStoreStaff.getStoreId());
if (null != poiStore) { if (null != poiStore) {
@ -211,14 +228,13 @@ public class PoiStoreStaffService {
privilageAccountService.insertAccount(poiStoreStaffVO.getStaffCode(), AccountEnum.ACCOUNT_FIRST_PWD.getDescribe(), userId); privilageAccountService.insertAccount(poiStoreStaffVO.getStaffCode(), AccountEnum.ACCOUNT_FIRST_PWD.getDescribe(), userId);
} }
//去生成一个推广人员二维码 //去生成一个推广人员二维码
QrCodeVO qrCodeVO = parseQrCode(poiStoreStaffVO); QrCodeDO qrCodeDO = parseQrCodeBSD(poiStoreStaffVO);
//添加一个店铺人员 //添加一个店铺人员
PoiStoreStaff poiStoreStaff = new PoiStoreStaff(); PoiStoreStaff poiStoreStaff = new PoiStoreStaff();
BeanUtils.copyProperties(poiStoreStaffVO,poiStoreStaff); BeanUtils.copyProperties(poiStoreStaffVO,poiStoreStaff);
poiStoreStaff.setUserId(userId); poiStoreStaff.setUserId(userId);
poiStoreStaff.setType(poiStoreStaffVO.getRoleId()); poiStoreStaff.setType(poiStoreStaffVO.getRoleId());
poiStoreStaff.setEpWechatQrCode(qrCodeVO.getQr_code()); poiStoreStaff.setEpWechatQrCode(qrCodeDO.getQrCode());
poiStoreStaff.setEpWechatConfigId(qrCodeVO.getConfig_id());
return poiStoreStaffDOMapper.insert(poiStoreStaff); return poiStoreStaffDOMapper.insert(poiStoreStaff);
} }
@ -240,9 +256,8 @@ public class PoiStoreStaffService {
//修改了所属店铺 //修改了所属店铺
if (!oldStaffInfo.getStoreId().equals(poiStoreStaffVO.getStoreId())){ if (!oldStaffInfo.getStoreId().equals(poiStoreStaffVO.getStoreId())){
// 判断条件是否重新修改二维码 // 判断条件是否重新修改二维码
QrCodeVO qrCodeVO = parseQrCode(poiStoreStaffVO); QrCodeDO qrCodeDO = parseQrCodeBSD(poiStoreStaffVO);
poiStoreStaff.setEpWechatQrCode(qrCodeVO.getQr_code()); poiStoreStaff.setEpWechatQrCode(qrCodeDO.getQrCode());
poiStoreStaff.setEpWechatConfigId(qrCodeVO.getConfig_id());
} }
BeanUtils.copyProperties(poiStoreStaffVO,poiStoreStaff); BeanUtils.copyProperties(poiStoreStaffVO,poiStoreStaff);
poiStoreStaff.setType(poiStoreStaffVO.getRoleId()); poiStoreStaff.setType(poiStoreStaffVO.getRoleId());
@ -272,6 +287,33 @@ public class PoiStoreStaffService {
return qrCodeService.getQrCode(qrCodeDO); return qrCodeService.getQrCode(qrCodeDO);
} }
/**
*
*/
public QrCodeDO parseQrCodeBSD(PoiStoreStaffVO poiStoreStaffVO) throws Exception {
QrCodeDO qrCodeDO = new QrCodeDO();
qrCodeDO.setType(1);
qrCodeDO.setScene(2);
//查询店铺店长编码
String cpUserId = privilageCpUserStoreDOMapper.selectCpUserIdByStoreId(poiStoreStaffVO.getStoreId());
PoiStore poiStore = poiStoreDOMapper.selectById(poiStoreStaffVO.getStoreId());
poiStoreStaffVO.setStoreCode(poiStore.getCode());
String[] data = new String[1];
//选择店铺对应店长的编码
data[0] = (cpUserId);
// data[0] = ("JiangDeXiang");
qrCodeDO.setUser(data);
//店铺编码-导购编码
qrCodeDO.setState(poiStore.getCode() + "-" + poiStoreStaffVO.getStaffCode());
String qrCode = storeEmployeeService.getQrCodeFromBSD(cpUserId, BSD_REQ_QRCODE_TYPE_SELLER, poiStoreStaffVO.getStaffCode(), poiStore.getCode());
qrCodeDO.setQrCode(qrCode);
return qrCodeDO;
}
/** /**
* 广 * 广
* *

@ -15,6 +15,7 @@ import com.kiisoo.ic.department.mapper.PrivilageDepartmentDOMapper;
import com.kiisoo.ic.domain.service.PrivilageDomainService; import com.kiisoo.ic.domain.service.PrivilageDomainService;
import com.kiisoo.ic.employee.entity.EmployeeDO; import com.kiisoo.ic.employee.entity.EmployeeDO;
import com.kiisoo.ic.employee.entity.ImportErrorDTO; import com.kiisoo.ic.employee.entity.ImportErrorDTO;
import com.kiisoo.ic.employee.entity.PrivilageCpUserDO;
import com.kiisoo.ic.employee.mapper.PrivilageCpUserDOMapper; import com.kiisoo.ic.employee.mapper.PrivilageCpUserDOMapper;
import com.kiisoo.ic.employee.service.EmployeeService; import com.kiisoo.ic.employee.service.EmployeeService;
import com.kiisoo.ic.generalize.entity.PrivilageOrganizational; import com.kiisoo.ic.generalize.entity.PrivilageOrganizational;
@ -94,99 +95,139 @@ public class StoreEmployeeService {
@Autowired @Autowired
private CustomerViewService customerViewService; private CustomerViewService customerViewService;
/** /**
* *
*
* @param storeId id * @param storeId id
* @param regionId id * @param regionId id
*/ */
public PageInfo<StoreUserDTO> listStoreUser(Long userId ,Long storeId, Long bigRegionId,Long companyId, Integer pageNum, Integer pageSize,String code) { public PageInfo<StoreUserDTO> listStoreUser(Long userId, Long storeId, Long bigRegionId, Long companyId, Integer pageNum, Integer pageSize, String code) throws Exception {
Map<String,Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
List<PoiStore> poiStores = null; List<PoiStore> poiStores = null;
List<Long> shopIds = new ArrayList<>(); List<Long> shopIds = new ArrayList<>();
if (storeId != null){ if (storeId != null) {
shopIds.add(storeId); shopIds.add(storeId);
}else if(StringUtils.isNotBlank(code)){ } else if (StringUtils.isNotBlank(code)) {
List<PoiStore> store = poiStoreDOMapper.selectShopByNameOrCode(code); List<PoiStore> store = poiStoreDOMapper.selectShopByNameOrCode(code);
shopIds = store.stream().map(i -> i.getId()).collect(Collectors.toList()); shopIds = store.stream().map(i -> i.getId()).collect(Collectors.toList());
List<Long> userAllShops = privilageDomainService.listUserDatePermission(userId); List<Long> userAllShops = privilageDomainService.listUserDatePermission(userId);
shopIds.retainAll(userAllShops); shopIds.retainAll(userAllShops);
}else if(companyId != null){ } else if (companyId != null) {
shopIds = new ArrayList<>(customerViewService.getCompanyShop(companyId, userId)); shopIds = new ArrayList<>(customerViewService.getCompanyShop(companyId, userId));
List<Long> userAllShops = privilageDomainService.listUserDatePermission(userId); List<Long> userAllShops = privilageDomainService.listUserDatePermission(userId);
shopIds.retainAll(userAllShops); shopIds.retainAll(userAllShops);
}else if(bigRegionId != null){ } else if (bigRegionId != null) {
shopIds = new ArrayList<>(customerViewService.getCompanyShop(bigRegionId, userId)); shopIds = new ArrayList<>(customerViewService.getCompanyShop(bigRegionId, userId));
List<Long> userAllShops = privilageDomainService.listUserDatePermission(userId); List<Long> userAllShops = privilageDomainService.listUserDatePermission(userId);
shopIds.retainAll(userAllShops); shopIds.retainAll(userAllShops);
}else{ } else {
//查询用户权限店铺 //查询用户权限店铺
shopIds = new ArrayList<>(privilageDomainService.listUserDatePermission(userId)); shopIds = new ArrayList<>(privilageDomainService.listUserDatePermission(userId));
} }
PageHelper.startPage(pageNum, pageSize); PageHelper.startPage(pageNum, pageSize);
List<StoreUserDTO> cpUserStoreDO = privilageCpUserStoreDOMapper.selectCpUserByShops(shopIds); List<StoreUserDTO> cpUserStoreDO = privilageCpUserStoreDOMapper.selectCpUserByShops(shopIds);
if (CollectionUtils.isNotEmpty(cpUserStoreDO)){ if (CollectionUtils.isNotEmpty(cpUserStoreDO)) {
int orderNum = (pageNum -1) * pageSize; int orderNum = (pageNum - 1) * pageSize;
for(StoreUserDTO cpUserStore : cpUserStoreDO) { for (StoreUserDTO cpUserStore : cpUserStoreDO) {
//设置序号 //设置序号
cpUserStore.setOrderNum(++orderNum); cpUserStore.setOrderNum(++orderNum);
//查询店铺绑定的企业微信 //查询店铺绑定的企业微信
PoiStore poiStore = poiStoreDOMapper.selectById(cpUserStore.getId()); PoiStore poiStore = poiStoreDOMapper.selectById(cpUserStore.getId());
if (null != poiStore){ if (null != poiStore) {
cpUserStore.setName(poiStore.getName()); cpUserStore.setName(poiStore.getName());
cpUserStore.setCode(poiStore.getCode()); cpUserStore.setCode(poiStore.getCode());
} }
String qrCodeAction = cpUserStore.getQrCodeAction();
if (StringUtils.isBlank(qrCodeAction)){
qrCodeAction = getQrCodeFromBSD(cpUserStore.getCpUserId(),BSD_REQ_QRCODE_TYPE_STORE,"0",cpUserStore.getCode());
cpUserStore.setQrCodeAction(qrCodeAction);
PrivilageCpUserDO update = new PrivilageCpUserDO();
update.setId(cpUserStore.getUserId());
update.setQrCode(qrCodeAction);
privilageCpUserDOMapper.updateById(update);
}
//查询导购数目 //查询导购数目
List<Long> shops = Arrays.asList(cpUserStore.getId()); List<Long> shops = Arrays.asList(cpUserStore.getId());
List<PoiStoreStaffDTO> sellerList = poiStoreStaffDOMapper.selectSellersByShopIds(shops); List<PoiStoreStaffDTO> sellerList = poiStoreStaffDOMapper.selectSellersByShopIds(shops);
int staffNum = 0; int staffNum = 0;
if (null != sellerList && sellerList.size() > 0){ if (null != sellerList && sellerList.size() > 0) {
staffNum = sellerList.size(); staffNum = sellerList.size();
} }
cpUserStore.setStaffNum(staffNum); cpUserStore.setStaffNum(staffNum);
//客户数 //客户数
QueryWrapper<OpSellerCustomerRelation> wrapper2 = new QueryWrapper<>(); QueryWrapper<OpSellerCustomerRelation> wrapper2 = new QueryWrapper<>();
wrapper2.eq("store_id",cpUserStore.getId()); wrapper2.eq("store_id", cpUserStore.getId());
List<OpSellerCustomerRelation> opRelations = opSellerCustomerRelationDOMapper.selectList(wrapper2); List<OpSellerCustomerRelation> opRelations = opSellerCustomerRelationDOMapper.selectList(wrapper2);
long count = opRelations.stream().map(OpSellerCustomerRelation::getCustomerId).distinct().count(); long count = opRelations.stream().map(OpSellerCustomerRelation::getCustomerId).distinct().count();
cpUserStore.setCustomerNum((int)count); cpUserStore.setCustomerNum((int) count);
} }
} }
return new PageInfo<>(cpUserStoreDO) ; return new PageInfo<>(cpUserStoreDO);
}
/**
*
* @param cpUserId
* @param type
* @param state
* @param storeNo
* @return
* @throws Exception
*/
public String getQrCodeFromBSD(String cpUserId,String type,String state,String storeNo) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Map<String, Object> params = new HashMap<>();
params.put("userId", cpUserId);
params.put("type", type);
params.put("state", state);
params.put("storeNo", storeNo);
String get = HttpUtil.post("http://vtest.bsd.cn/BSD_WXAPP/qyWechat/getShareQRcode?token=" + MD5FileUtil.getMD5String("BOSIDENG"+sdf.format(new Date())), params);
JSONObject qrCodeJson = JSONObject.parseObject(get);
BsdShareCodeResponse bsdResponse = qrCodeJson.toJavaObject(BsdShareCodeResponse.class);
if (bsdResponse.getSuccess()){
return bsdResponse.getResultCode();
}
return null;
} }
/** /**
* *
*
* @param response * @param response
*/ */
public void downloadStoreUserCode(HttpServletResponse response) throws IOException { public void downloadStoreUserCode(HttpServletResponse response) throws IOException {
//查询所有公司 //查询所有公司
List<PrivilageOrganizational> privilageOrganizationals = retailCompanyMapper.selectList(null); List<PrivilageOrganizational> privilageOrganizationals = retailCompanyMapper.selectList(null);
if (CollectionUtils.isNotEmpty(privilageOrganizationals)){ if (CollectionUtils.isNotEmpty(privilageOrganizationals)) {
//根文件夹用于存放公司 //根文件夹用于存放公司
String fileUrl = "门店码-"+UUID.randomUUID().toString().replace("-", ""); String fileUrl = "门店码-" + UUID.randomUUID().toString().replace("-", "");
File file = new File(fileUrl); File file = new File(fileUrl);
file.mkdir(); file.mkdir();
// 生成的ZIP文件名 // 生成的ZIP文件名
String strZipName = "store_qrCode_"+ fileUrl +".zip"; String strZipName = "store_qrCode_" + fileUrl + ".zip";
FileOutputStream out = new FileOutputStream(new File(strZipName)); FileOutputStream out = new FileOutputStream(new File(strZipName));
//遍历零售公司 //遍历零售公司
for (PrivilageOrganizational privilageOrganizational:privilageOrganizationals) { for (PrivilageOrganizational privilageOrganizational : privilageOrganizationals) {
if (privilageOrganizational == null || privilageOrganizational.getId() == null){ if (privilageOrganizational == null || privilageOrganizational.getId() == null) {
continue; continue;
} }
//创建零售公司文件夹 //创建零售公司文件夹
File complayFile = new File(file.getPath()+"/"+privilageOrganizational.getName()); File complayFile = new File(file.getPath() + "/" + privilageOrganizational.getName());
complayFile.mkdir(); complayFile.mkdir();
//查询店铺 //查询店铺
List<PoiStore> poiStores = poiStoreDOMapper.selectShopByCompany(privilageOrganizational.getId()); List<PoiStore> poiStores = poiStoreDOMapper.selectShopByCompany(privilageOrganizational.getId());
if (CollectionUtils.isNotEmpty(poiStores)){ if (CollectionUtils.isNotEmpty(poiStores)) {
//遍历店铺查询门店码url //遍历店铺查询门店码url
for (PoiStore poiStore:poiStores){ for (PoiStore poiStore : poiStores) {
String url = poiStoreDOMapper.selectStoreQrCode(poiStore.getId()); String url = poiStoreDOMapper.selectStoreQrCode(poiStore.getId());
if (StringUtils.isBlank(url)){ if (StringUtils.isBlank(url)) {
continue; continue;
} }
//下载图片 //下载图片
@ -198,7 +239,7 @@ public class StoreEmployeeService {
//绘制改变尺寸后的图 //绘制改变尺寸后的图
tag.getGraphics().drawImage(bi, 0, 0, 300, 300, null); tag.getGraphics().drawImage(bi, 0, 0, 300, 300, null);
//输出流 //输出流
BufferedOutputStream image = new BufferedOutputStream(new FileOutputStream(complayFile.getPath() +"/" +poiStore.getCode() + ".png")); BufferedOutputStream image = new BufferedOutputStream(new FileOutputStream(complayFile.getPath() + "/" + poiStore.getCode() + ".png"));
ImageIO.write(tag, "PNG", image); ImageIO.write(tag, "PNG", image);
@ -209,7 +250,7 @@ public class StoreEmployeeService {
} }
//将根文件转换为zip文件 //将根文件转换为zip文件
ZipUtils.toZip(file.getPath(),out,true); ZipUtils.toZip(file.getPath(), out, true);
//将文件输入到response //将文件输入到response
ServletOutputStream outputStream = response.getOutputStream(); ServletOutputStream outputStream = response.getOutputStream();
@ -225,59 +266,61 @@ public class StoreEmployeeService {
zipFile.delete(); zipFile.delete();
} }
} }
/** /**
* *
*
* @param response * @param response
*/ */
public void downloadStoreUserCodeFromBSD(HttpServletResponse response) throws Exception { public void downloadStoreUserCodeFromBSD(HttpServletResponse response) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//查询所有公司 //查询所有公司
QueryWrapper<PrivilageOrganizational> queryWrapper = new QueryWrapper<>(); QueryWrapper<PrivilageOrganizational> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status",1).eq("type",1).eq("level",2); queryWrapper.eq("status", 1).eq("type", 1).eq("level", 2);
List<PrivilageOrganizational> privilageOrganizationals = retailCompanyMapper.selectList(queryWrapper); List<PrivilageOrganizational> privilageOrganizationals = retailCompanyMapper.selectList(queryWrapper);
if (CollectionUtils.isNotEmpty(privilageOrganizationals)){ if (CollectionUtils.isNotEmpty(privilageOrganizationals)) {
//根文件夹用于存放公司 //根文件夹用于存放公司
String fileUrl = "门店码-"+UUID.randomUUID().toString().replace("-", ""); String fileUrl = "门店码-" + UUID.randomUUID().toString().replace("-", "");
File file = new File(fileUrl); File file = new File(fileUrl);
file.mkdir(); file.mkdir();
// 生成的ZIP文件名 // 生成的ZIP文件名
String strZipName = "store_qrCode_"+ fileUrl +".zip"; String strZipName = "store_qrCode_" + fileUrl + ".zip";
FileOutputStream out = new FileOutputStream(new File(strZipName)); FileOutputStream out = new FileOutputStream(new File(strZipName));
//遍历零售公司 //遍历零售公司
for (PrivilageOrganizational privilageOrganizational:privilageOrganizationals) { for (PrivilageOrganizational privilageOrganizational : privilageOrganizationals) {
if (privilageOrganizational == null || privilageOrganizational.getId() == null){ if (privilageOrganizational == null || privilageOrganizational.getId() == null) {
continue; continue;
} }
//创建零售公司文件夹 //创建零售公司文件夹
File complayFile = new File(file.getPath()+"/"+privilageOrganizational.getName()); File complayFile = new File(file.getPath() + "/" + privilageOrganizational.getName());
complayFile.mkdir(); complayFile.mkdir();
//查询客户 //查询客户
QueryWrapper<PrivilageOrganizational> customerWrap = new QueryWrapper<>(); QueryWrapper<PrivilageOrganizational> customerWrap = new QueryWrapper<>();
customerWrap.eq("status",1).eq("type",1).eq("level",3).eq("parent_id",privilageOrganizational.getId()); customerWrap.eq("status", 1).eq("type", 1).eq("level", 3).eq("parent_id", privilageOrganizational.getId());
List<PrivilageOrganizational> customerList = retailCompanyMapper.selectList(customerWrap); List<PrivilageOrganizational> customerList = retailCompanyMapper.selectList(customerWrap);
if (CollectionUtils.isNotEmpty(customerList)){ if (CollectionUtils.isNotEmpty(customerList)) {
List<Long> customerIds = customerList.stream().map(i -> i.getId()).collect(Collectors.toList()); List<Long> customerIds = customerList.stream().map(i -> i.getId()).collect(Collectors.toList());
//查询店铺 //查询店铺
List<PoiStore> poiStores = poiStoreDOMapper.selectShopByCustomerIds(customerIds); List<PoiStore> poiStores = poiStoreDOMapper.selectShopByCustomerIds(customerIds);
if (CollectionUtils.isNotEmpty(poiStores)){ if (CollectionUtils.isNotEmpty(poiStores)) {
//遍历店铺查询门店码url //遍历店铺查询门店码url
for (PoiStore poiStore:poiStores){ for (PoiStore poiStore : poiStores) {
String cpUserId = privilageCpUserStoreDOMapper.selectCpUserIdByStoreId(poiStore.getId()); String cpUserId = privilageCpUserStoreDOMapper.selectCpUserIdByStoreId(poiStore.getId());
if (StringUtils.isBlank(cpUserId)){ if (StringUtils.isBlank(cpUserId)) {
continue; continue;
} }
Map<String,Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("userId",cpUserId); params.put("userId", cpUserId);
params.put("type",0); params.put("type", 0);
params.put("storeNo",poiStore.getCode()); params.put("storeNo", poiStore.getCode());
String get = HttpUtil.get("http://vtest.bsd.cn/BSD_WXAPP/qyWechat/getShareQRcode?token=BOSIDENG" + MD5FileUtil.getMD5String(sdf.format(new Date())), params); String get = HttpUtil.get("http://vtest.bsd.cn/BSD_WXAPP/qyWechat/getShareQRcode?token=BOSIDENG" + MD5FileUtil.getMD5String(sdf.format(new Date())), params);
JSONObject saveAccountInputJSON = JSONObject.parseObject(get); JSONObject saveAccountInputJSON = JSONObject.parseObject(get);
BsdShareCodeResponse bsdResponse = saveAccountInputJSON.toJavaObject(BsdShareCodeResponse.class); BsdShareCodeResponse bsdResponse = saveAccountInputJSON.toJavaObject(BsdShareCodeResponse.class);
String url = bsdResponse.getData(); String url = bsdResponse.getData();
if (StringUtils.isBlank(url)){ if (StringUtils.isBlank(url)) {
continue; continue;
} }
//下载图片 //下载图片
@ -289,7 +332,7 @@ public class StoreEmployeeService {
//绘制改变尺寸后的图 //绘制改变尺寸后的图
tag.getGraphics().drawImage(bi, 0, 0, 300, 300, null); tag.getGraphics().drawImage(bi, 0, 0, 300, 300, null);
//输出流 //输出流
BufferedOutputStream image = new BufferedOutputStream(new FileOutputStream(complayFile.getPath() +"/" +poiStore.getCode() + ".png")); BufferedOutputStream image = new BufferedOutputStream(new FileOutputStream(complayFile.getPath() + "/" + poiStore.getCode() + ".png"));
ImageIO.write(tag, "PNG", image); ImageIO.write(tag, "PNG", image);
@ -301,7 +344,7 @@ public class StoreEmployeeService {
} }
//将根文件转换为zip文件 //将根文件转换为zip文件
ZipUtils.toZip(file.getPath(),out,true); ZipUtils.toZip(file.getPath(), out, true);
//将文件输入到response //将文件输入到response
ServletOutputStream outputStream = response.getOutputStream(); ServletOutputStream outputStream = response.getOutputStream();
@ -317,48 +360,50 @@ public class StoreEmployeeService {
zipFile.delete(); zipFile.delete();
} }
} }
/** /**
* *
*
* @param response * @param response
*/ */
public void downloadStoreStaffCode(HttpServletResponse response) throws IOException { public void downloadStoreStaffCode(HttpServletResponse response) throws IOException {
//查询所有公司 //查询所有公司
List<PrivilageOrganizational> privilageOrganizationals = retailCompanyMapper.selectList(null); List<PrivilageOrganizational> privilageOrganizationals = retailCompanyMapper.selectList(null);
if (CollectionUtils.isNotEmpty(privilageOrganizationals)){ if (CollectionUtils.isNotEmpty(privilageOrganizationals)) {
//根文件夹用于存放公司 //根文件夹用于存放公司
String fileUrl = "导购码-"+UUID.randomUUID().toString().replace("-", ""); String fileUrl = "导购码-" + UUID.randomUUID().toString().replace("-", "");
File file = new File(fileUrl); File file = new File(fileUrl);
file.mkdir(); file.mkdir();
// 生成的ZIP文件名 // 生成的ZIP文件名
String strZipName = "store_qrCode_"+ fileUrl +".zip"; String strZipName = "store_qrCode_" + fileUrl + ".zip";
FileOutputStream out = new FileOutputStream(new File(strZipName)); FileOutputStream out = new FileOutputStream(new File(strZipName));
//遍历零售公司 //遍历零售公司
for (PrivilageOrganizational privilageOrganizational:privilageOrganizationals) { for (PrivilageOrganizational privilageOrganizational : privilageOrganizationals) {
if (privilageOrganizational == null || privilageOrganizational.getId() == null){ if (privilageOrganizational == null || privilageOrganizational.getId() == null) {
continue; continue;
} }
//创建零售公司文件夹 //创建零售公司文件夹
File complayFile = new File(file.getPath()+"/"+privilageOrganizational.getName()); File complayFile = new File(file.getPath() + "/" + privilageOrganizational.getName());
complayFile.mkdir(); complayFile.mkdir();
//查询店铺 //查询店铺
List<PoiStore> poiStores = poiStoreDOMapper.selectShopByCompany(privilageOrganizational.getId()); List<PoiStore> poiStores = poiStoreDOMapper.selectShopByCompany(privilageOrganizational.getId());
if (CollectionUtils.isNotEmpty(poiStores)){ if (CollectionUtils.isNotEmpty(poiStores)) {
//遍历店铺查询门店码url //遍历店铺查询门店码url
for (PoiStore poiStore:poiStores){ for (PoiStore poiStore : poiStores) {
//创建零售公司文件夹 //创建零售公司文件夹
File storeFile = new File(complayFile.getPath()+"/"+poiStore.getName()); File storeFile = new File(complayFile.getPath() + "/" + poiStore.getName());
storeFile.mkdir(); storeFile.mkdir();
QueryWrapper<PoiStoreStaff> staffQr = new QueryWrapper(); QueryWrapper<PoiStoreStaff> staffQr = new QueryWrapper();
staffQr.eq(DATABASE_STORE_ID_KEY,poiStore.getId()); staffQr.eq(DATABASE_STORE_ID_KEY, poiStore.getId());
staffQr.eq(DATABASE_TYPE_KEY,TYPE_STAFF_SELLER); staffQr.eq(DATABASE_TYPE_KEY, TYPE_STAFF_SELLER);
List<PoiStoreStaff> poiStoreStaffs = poiStoreStaffDOMapper.selectList(staffQr); List<PoiStoreStaff> poiStoreStaffs = poiStoreStaffDOMapper.selectList(staffQr);
if (CollectionUtils.isNotEmpty(poiStoreStaffs)){ if (CollectionUtils.isNotEmpty(poiStoreStaffs)) {
for (PoiStoreStaff poiStoreStaff:poiStoreStaffs){ for (PoiStoreStaff poiStoreStaff : poiStoreStaffs) {
String url = poiStoreStaff.getEpWechatQrCode(); String url = poiStoreStaff.getEpWechatQrCode();
if (StringUtils.isBlank(url)){ if (StringUtils.isBlank(url)) {
continue; continue;
} }
//下载图片 //下载图片
@ -370,7 +415,7 @@ public class StoreEmployeeService {
//绘制改变尺寸后的图 //绘制改变尺寸后的图
tag.getGraphics().drawImage(bi, 0, 0, 300, 300, null); tag.getGraphics().drawImage(bi, 0, 0, 300, 300, null);
//输出流 //输出流
BufferedOutputStream image = new BufferedOutputStream(new FileOutputStream(storeFile.getPath() +"/" +poiStoreStaff.getStaffCode() + ".png")); BufferedOutputStream image = new BufferedOutputStream(new FileOutputStream(storeFile.getPath() + "/" + poiStoreStaff.getStaffCode() + ".png"));
ImageIO.write(tag, "PNG", image); ImageIO.write(tag, "PNG", image);
@ -383,7 +428,7 @@ public class StoreEmployeeService {
} }
//将根文件转换为zip文件 //将根文件转换为zip文件
ZipUtils.toZip(file.getPath(),out,true); ZipUtils.toZip(file.getPath(), out, true);
//将文件输入到response //将文件输入到response
ServletOutputStream outputStream = response.getOutputStream(); ServletOutputStream outputStream = response.getOutputStream();
@ -399,67 +444,69 @@ public class StoreEmployeeService {
zipFile.delete(); zipFile.delete();
} }
} }
/** /**
* *
*
* @param response * @param response
*/ */
public void downloadStoreStaffCodeFromBSD(HttpServletResponse response) throws Exception { public void downloadStoreStaffCodeFromBSD(HttpServletResponse response) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//查询所有公司 //查询所有公司
List<PrivilageOrganizational> privilageOrganizationals = retailCompanyMapper.selectList(null); List<PrivilageOrganizational> privilageOrganizationals = retailCompanyMapper.selectList(null);
if (CollectionUtils.isNotEmpty(privilageOrganizationals)){ if (CollectionUtils.isNotEmpty(privilageOrganizationals)) {
//根文件夹用于存放公司 //根文件夹用于存放公司
String fileUrl = "导购码-"+UUID.randomUUID().toString().replace("-", ""); String fileUrl = "导购码-" + UUID.randomUUID().toString().replace("-", "");
File file = new File(fileUrl); File file = new File(fileUrl);
file.mkdir(); file.mkdir();
// 生成的ZIP文件名 // 生成的ZIP文件名
String strZipName = "store_qrCode_"+ fileUrl +".zip"; String strZipName = "store_qrCode_" + fileUrl + ".zip";
FileOutputStream out = new FileOutputStream(new File(strZipName)); FileOutputStream out = new FileOutputStream(new File(strZipName));
//遍历零售公司 //遍历零售公司
for (PrivilageOrganizational privilageOrganizational:privilageOrganizationals) { for (PrivilageOrganizational privilageOrganizational : privilageOrganizationals) {
if (privilageOrganizational == null || privilageOrganizational.getId() == null){ if (privilageOrganizational == null || privilageOrganizational.getId() == null) {
continue; continue;
} }
//创建零售公司文件夹 //创建零售公司文件夹
File complayFile = new File(file.getPath()+"/"+privilageOrganizational.getName()); File complayFile = new File(file.getPath() + "/" + privilageOrganizational.getName());
complayFile.mkdir(); complayFile.mkdir();
QueryWrapper<PrivilageOrganizational> customerWrap = new QueryWrapper<>(); QueryWrapper<PrivilageOrganizational> customerWrap = new QueryWrapper<>();
customerWrap.eq("status",1).eq("type",1).eq("level",3).eq("parent_id",privilageOrganizational.getId()); customerWrap.eq("status", 1).eq("type", 1).eq("level", 3).eq("parent_id", privilageOrganizational.getId());
List<PrivilageOrganizational> customerList = retailCompanyMapper.selectList(customerWrap); List<PrivilageOrganizational> customerList = retailCompanyMapper.selectList(customerWrap);
if (CollectionUtils.isNotEmpty(customerList)) { if (CollectionUtils.isNotEmpty(customerList)) {
List<Long> customerIds = customerList.stream().map(i -> i.getId()).collect(Collectors.toList()); List<Long> customerIds = customerList.stream().map(i -> i.getId()).collect(Collectors.toList());
//查询店铺 //查询店铺
List<PoiStore> poiStores = poiStoreDOMapper.selectShopByCustomerIds(customerIds); List<PoiStore> poiStores = poiStoreDOMapper.selectShopByCustomerIds(customerIds);
if (CollectionUtils.isNotEmpty(poiStores)){ if (CollectionUtils.isNotEmpty(poiStores)) {
//遍历店铺查询门店码url //遍历店铺查询门店码url
for (PoiStore poiStore:poiStores){ for (PoiStore poiStore : poiStores) {
//创建零售公司文件夹 //创建零售公司文件夹
File storeFile = new File(complayFile.getPath()+"/"+poiStore.getName()); File storeFile = new File(complayFile.getPath() + "/" + poiStore.getName());
storeFile.mkdir(); storeFile.mkdir();
QueryWrapper<PoiStoreStaff> staffQr = new QueryWrapper(); QueryWrapper<PoiStoreStaff> staffQr = new QueryWrapper();
staffQr.eq(DATABASE_STORE_ID_KEY,poiStore.getId()); staffQr.eq(DATABASE_STORE_ID_KEY, poiStore.getId());
staffQr.eq(DATABASE_TYPE_KEY,TYPE_STAFF_SELLER); staffQr.eq(DATABASE_TYPE_KEY, TYPE_STAFF_SELLER);
List<PoiStoreStaff> poiStoreStaffs = poiStoreStaffDOMapper.selectList(staffQr); List<PoiStoreStaff> poiStoreStaffs = poiStoreStaffDOMapper.selectList(staffQr);
if (CollectionUtils.isNotEmpty(poiStoreStaffs)){ if (CollectionUtils.isNotEmpty(poiStoreStaffs)) {
for (PoiStoreStaff poiStoreStaff:poiStoreStaffs){ for (PoiStoreStaff poiStoreStaff : poiStoreStaffs) {
String cpUserId = privilageCpUserStoreDOMapper.selectCpUserIdByStoreId(poiStore.getId()); String cpUserId = privilageCpUserStoreDOMapper.selectCpUserIdByStoreId(poiStore.getId());
if (StringUtils.isBlank(cpUserId)){ if (StringUtils.isBlank(cpUserId)) {
continue; continue;
} }
Map<String,Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("userId",cpUserId); params.put("userId", cpUserId);
params.put("type",1); params.put("type", 1);
params.put("state",poiStoreStaff.getStaffCode()); params.put("state", poiStoreStaff.getStaffCode());
params.put("storeNo",poiStore.getCode()); params.put("storeNo", poiStore.getCode());
String get = HttpUtil.get("http://vtest.bsd.cn/BSD_WXAPP/qyWechat/getShareQRcode?token=BOSIDENG" + MD5FileUtil.getMD5String(sdf.format(new Date())), params); String get = HttpUtil.get("http://vtest.bsd.cn/BSD_WXAPP/qyWechat/getShareQRcode?token=BOSIDENG" + MD5FileUtil.getMD5String(sdf.format(new Date())), params);
JSONObject saveAccountInputJSON = JSONObject.parseObject(get); JSONObject saveAccountInputJSON = JSONObject.parseObject(get);
BsdShareCodeResponse bsdResponse = saveAccountInputJSON.toJavaObject(BsdShareCodeResponse.class); BsdShareCodeResponse bsdResponse = saveAccountInputJSON.toJavaObject(BsdShareCodeResponse.class);
String url = bsdResponse.getData(); String url = bsdResponse.getData();
if (StringUtils.isBlank(url)){ if (StringUtils.isBlank(url)) {
continue; continue;
} }
@ -472,7 +519,7 @@ public class StoreEmployeeService {
//绘制改变尺寸后的图 //绘制改变尺寸后的图
tag.getGraphics().drawImage(bi, 0, 0, 300, 300, null); tag.getGraphics().drawImage(bi, 0, 0, 300, 300, null);
//输出流 //输出流
BufferedOutputStream image = new BufferedOutputStream(new FileOutputStream(storeFile.getPath() +"/" +poiStoreStaff.getStaffCode() + ".png")); BufferedOutputStream image = new BufferedOutputStream(new FileOutputStream(storeFile.getPath() + "/" + poiStoreStaff.getStaffCode() + ".png"));
ImageIO.write(tag, "PNG", image); ImageIO.write(tag, "PNG", image);
@ -487,7 +534,7 @@ public class StoreEmployeeService {
} }
//将根文件转换为zip文件 //将根文件转换为zip文件
ZipUtils.toZip(file.getPath(),out,true); ZipUtils.toZip(file.getPath(), out, true);
//将文件输入到response //将文件输入到response
ServletOutputStream outputStream = response.getOutputStream(); ServletOutputStream outputStream = response.getOutputStream();
@ -506,6 +553,7 @@ public class StoreEmployeeService {
/** /**
* excel * excel
*
* @param file excel * @param file excel
* @return * @return
* @throws Exception * @throws Exception
@ -536,7 +584,7 @@ public class StoreEmployeeService {
if (dataRow == null) { if (dataRow == null) {
continue; continue;
} }
addRowInfo(dataRow,results,r); addRowInfo(dataRow, results, r);
} }
} }
} }
@ -545,39 +593,40 @@ public class StoreEmployeeService {
/** /**
* Excel- * Excel-
*
* @param dataRow * @param dataRow
* @param results * @param results
* @param row * @param row
* @throws Exception * @throws Exception
*/ */
private void addRowInfo(Row dataRow,List<ImportErrorDTO> results,Integer row) throws Exception { private void addRowInfo(Row dataRow, List<ImportErrorDTO> results, Integer row) throws Exception {
//初始化导购对象 //初始化导购对象
EmployeeDO employeeDO = new EmployeeDO(); EmployeeDO employeeDO = new EmployeeDO();
//获取店铺名和店铺code //获取店铺名和店铺code
String shopName = dataRow.getCell(0).getStringCellValue(); String shopName = dataRow.getCell(0).getStringCellValue();
if (StringUtils.isBlank(shopName)){ if (StringUtils.isBlank(shopName)) {
getReason(row,"未填写店铺名",results); getReason(row, "未填写店铺名", results);
return; return;
} }
String shopCode = dataRow.getCell(1).getStringCellValue(); String shopCode = dataRow.getCell(1).getStringCellValue();
if (StringUtils.isBlank(shopCode)){ if (StringUtils.isBlank(shopCode)) {
getReason(row,"未填写店铺Code",results); getReason(row, "未填写店铺Code", results);
return; return;
} }
//查询店铺信息 //查询店铺信息
QueryWrapper<PoiStore> storeParams = new QueryWrapper<>(); QueryWrapper<PoiStore> storeParams = new QueryWrapper<>();
storeParams.eq(DATABASE_NAME_KEY,shopName); storeParams.eq(DATABASE_NAME_KEY, shopName);
storeParams.eq(DATABASE_CODE_KEY,shopCode); storeParams.eq(DATABASE_CODE_KEY, shopCode);
PoiStore poiStore = poiStoreDOMapper.selectOne(storeParams); PoiStore poiStore = poiStoreDOMapper.selectOne(storeParams);
if (poiStore == null){ if (poiStore == null) {
getReason(row,"未找到店铺",results); getReason(row, "未找到店铺", results);
return; return;
} }
employeeDO.setStoreId(poiStore.getId()); employeeDO.setStoreId(poiStore.getId());
//获取企业微信账号user_id //获取企业微信账号user_id
String cpUserId = dataRow.getCell(2).getStringCellValue(); String cpUserId = dataRow.getCell(2).getStringCellValue();
if (StringUtils.isBlank(cpUserId)){ if (StringUtils.isBlank(cpUserId)) {
getReason(row,"未填写账号",results); getReason(row, "未填写账号", results);
return; return;
} }
employeeDO.setUserId(cpUserId); employeeDO.setUserId(cpUserId);
@ -588,15 +637,15 @@ public class StoreEmployeeService {
//获取部门信息 //获取部门信息
String departmentName = dataRow.getCell(4).getStringCellValue(); String departmentName = dataRow.getCell(4).getStringCellValue();
if (StringUtils.isBlank(departmentName)){ if (StringUtils.isBlank(departmentName)) {
getReason(row,"未填写部门",results); getReason(row, "未填写部门", results);
return; return;
} }
QueryWrapper<DepartmentDO> depParams = new QueryWrapper<DepartmentDO>(); QueryWrapper<DepartmentDO> depParams = new QueryWrapper<DepartmentDO>();
depParams.eq(DATABASE_NAME_KEY,departmentName); depParams.eq(DATABASE_NAME_KEY, departmentName);
DepartmentDO departmentDO = departmentDOMapper.selectOne(depParams); DepartmentDO departmentDO = departmentDOMapper.selectOne(depParams);
if (departmentDO == null){ if (departmentDO == null) {
getReason(row,"未找到部门",results); getReason(row, "未找到部门", results);
return; return;
} }
Long[] depIds = new Long[1]; Long[] depIds = new Long[1];
@ -604,29 +653,30 @@ public class StoreEmployeeService {
employeeDO.setDepartIds(depIds); employeeDO.setDepartIds(depIds);
String mobile = dataRow.getCell(5).getStringCellValue(); String mobile = dataRow.getCell(5).getStringCellValue();
if (StringUtils.isBlank(mobile)){ if (StringUtils.isBlank(mobile)) {
getReason(row,"未填写手机号",results); getReason(row, "未填写手机号", results);
return; return;
} }
employeeDO.setMobile(mobile); employeeDO.setMobile(mobile);
String returnCode = employeeService.addUser(employeeDO); String returnCode = employeeService.addUser(employeeDO);
if (returnCode.contains(ADD_CP_CODE_BINDED)){ if (returnCode.contains(ADD_CP_CODE_BINDED)) {
String[] split = returnCode.split("&"); String[] split = returnCode.split("&");
getReason(row,"该账号已绑定【"+ split[1] +"】店铺",results); getReason(row, "该账号已绑定【" + split[1] + "】店铺", results);
} }
} }
/** /**
* *
*
* @param row * @param row
* @param reason * @param reason
* @param results * @param results
*/ */
private void getReason(Integer row,String reason,List<ImportErrorDTO> results){ private void getReason(Integer row, String reason, List<ImportErrorDTO> results) {
ImportErrorDTO importErrorDTO = new ImportErrorDTO(); ImportErrorDTO importErrorDTO = new ImportErrorDTO();
importErrorDTO.setRow(row); importErrorDTO.setRow(row);
reason = "第"+ row + "行导入失败,原因:"+reason; reason = "第" + row + "行导入失败,原因:" + reason;
importErrorDTO.setReason(reason); importErrorDTO.setReason(reason);
results.add(importErrorDTO); results.add(importErrorDTO);
} }

@ -3,7 +3,7 @@ package com.kiisoo.ic.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kiisoo.ic.constants.Constants; import com.kiisoo.ic.constants.Constants;
import com.kiisoo.ic.employee.entity.QrCodeVO; import com.kiisoo.ic.employee.entity.QrCodeDO;
import com.kiisoo.ic.store.entity.PoiStore; import com.kiisoo.ic.store.entity.PoiStore;
import com.kiisoo.ic.store.entity.PoiStoreStaff; import com.kiisoo.ic.store.entity.PoiStoreStaff;
import com.kiisoo.ic.store.entity.PoiStoreStaffVO; import com.kiisoo.ic.store.entity.PoiStoreStaffVO;
@ -83,11 +83,10 @@ public class PrivilageUserServiceImpl extends ServiceImpl<PrivilageUserDOMapper,
poiStoreStaffVO.setStoreId(shopId); poiStoreStaffVO.setStoreId(shopId);
poiStoreStaffVO.setStaffCode(staffCode); poiStoreStaffVO.setStaffCode(staffCode);
//去生成一个推广人员二维码 //去生成一个推广人员二维码
QrCodeVO qrCodeVO = null; QrCodeDO qrCodeDO = null;
try { try {
qrCodeVO = parseQrCode.parseQrCode(poiStoreStaffVO); qrCodeDO = parseQrCode.parseQrCodeBSD(poiStoreStaffVO);
poiStoreStaff.setEpWechatQrCode(qrCodeVO.getQr_code()); poiStoreStaff.setEpWechatQrCode(qrCodeDO.getQrCode());
poiStoreStaff.setEpWechatConfigId(qrCodeVO.getConfig_id());
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

@ -3,7 +3,7 @@
<mapper namespace="com.kiisoo.ic.store.mapper.PrivilageCpUserStoreDOMapper"> <mapper namespace="com.kiisoo.ic.store.mapper.PrivilageCpUserStoreDOMapper">
<select id="selectCpUserByShops" resultType="com.kiisoo.ic.store.entity.StoreUserDTO"> <select id="selectCpUserByShops" resultType="com.kiisoo.ic.store.entity.StoreUserDTO">
select distinct pcu.cp_user_id as cpUserId,pcu.qr_code as qrCodeAction,pcus.store_id as id select distinct pcu.cp_user_id as cpUserId,pcu.qr_code as qrCodeAction,pcus.store_id as id,pcu.id as userId
from privilage_cp_user_store pcus ,privilage_cp_user pcu where pcus.cp_user_id = pcu.id and pcu.status in (1,4) from privilage_cp_user_store pcus ,privilage_cp_user pcu where pcus.cp_user_id = pcu.id and pcu.status in (1,4)
<choose> <choose>
<when test="shopIds != null and shopIds.size > 0"> <when test="shopIds != null and shopIds.size > 0">

Loading…
Cancel
Save