From 9e14d1c953402ad23ac4a22607d9e29ff4d5bb2c Mon Sep 17 00:00:00 2001 From: yechenhao Date: Fri, 24 Apr 2020 09:47:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B7=E6=B1=82=E6=B3=A2=E5=8F=B8=E7=99=BB?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/bean/BsdShareCodeListResponse.java | 18 ++ .../ic/store/bean/BsdShareCodeResponse.java | 12 + .../kiisoo/ic/store/bean/QyWechatUserDTO.java | 11 + .../controller/StoreEmployeeController.java | 28 +++ .../ic/store/mapper/PoiStoreDOMapper.java | 2 + .../store/service/StoreEmployeeService.java | 208 +++++++++++++++++- .../service/StorePromotionDataService.java | 31 ++- .../resources/mapper/PoiStoreDOMapper.xml | 20 ++ 8 files changed, 318 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/kiisoo/ic/store/bean/BsdShareCodeListResponse.java create mode 100644 src/main/java/com/kiisoo/ic/store/bean/BsdShareCodeResponse.java create mode 100644 src/main/java/com/kiisoo/ic/store/bean/QyWechatUserDTO.java diff --git a/src/main/java/com/kiisoo/ic/store/bean/BsdShareCodeListResponse.java b/src/main/java/com/kiisoo/ic/store/bean/BsdShareCodeListResponse.java new file mode 100644 index 0000000..4456920 --- /dev/null +++ b/src/main/java/com/kiisoo/ic/store/bean/BsdShareCodeListResponse.java @@ -0,0 +1,18 @@ +package com.kiisoo.ic.store.bean; + +import lombok.Data; + +import java.util.List; + +@Data +public class BsdShareCodeListResponse { + private Boolean success; + private String resultCode; + private String errorMessage; + private List data; + + + +} + + diff --git a/src/main/java/com/kiisoo/ic/store/bean/BsdShareCodeResponse.java b/src/main/java/com/kiisoo/ic/store/bean/BsdShareCodeResponse.java new file mode 100644 index 0000000..7c768ca --- /dev/null +++ b/src/main/java/com/kiisoo/ic/store/bean/BsdShareCodeResponse.java @@ -0,0 +1,12 @@ +package com.kiisoo.ic.store.bean; + +import lombok.Data; + +@Data +public class BsdShareCodeResponse { + private Boolean success; + private String resultCode; + private String errorMessage; + private String data; + +} diff --git a/src/main/java/com/kiisoo/ic/store/bean/QyWechatUserDTO.java b/src/main/java/com/kiisoo/ic/store/bean/QyWechatUserDTO.java new file mode 100644 index 0000000..f7fa414 --- /dev/null +++ b/src/main/java/com/kiisoo/ic/store/bean/QyWechatUserDTO.java @@ -0,0 +1,11 @@ +package com.kiisoo.ic.store.bean; + +import lombok.Data; + +@Data +public class QyWechatUserDTO{ + private String userId; + private String qRcodeUrl; + private String type; + +} \ No newline at end of file diff --git a/src/main/java/com/kiisoo/ic/store/controller/StoreEmployeeController.java b/src/main/java/com/kiisoo/ic/store/controller/StoreEmployeeController.java index e0df956..d900853 100644 --- a/src/main/java/com/kiisoo/ic/store/controller/StoreEmployeeController.java +++ b/src/main/java/com/kiisoo/ic/store/controller/StoreEmployeeController.java @@ -79,6 +79,20 @@ public class StoreEmployeeController extends BaseController { } } + /** + * 批量下载店铺二维码 + * @param response + */ + @RequestMapping(value = "download/store/code/bsd",method = RequestMethod.POST) + @ResponseBody + public void downloadCodeBSD(HttpServletResponse response) { + try { + storeEmployeeService.downloadStoreUserCodeFromBSD(response); + } catch (Exception e) { + log.error("批量下载店铺二维码失败", e); + } + } + /** * 批量下载导购二维码 * @param response @@ -92,4 +106,18 @@ public class StoreEmployeeController extends BaseController { log.error("批量下载店铺二维码失败", e); } } + + /** + * 批量下载导购二维码 + * @param response + */ + @RequestMapping(value = "download/store/seller/code/bsd",method = RequestMethod.POST) + @ResponseBody + public void downloadSellerCodeBSD(HttpServletResponse response) { + try { + storeEmployeeService.downloadStoreStaffCodeFromBSD(response); + } catch (Exception e) { + log.error("批量下载店铺二维码失败", e); + } + } } diff --git a/src/main/java/com/kiisoo/ic/store/mapper/PoiStoreDOMapper.java b/src/main/java/com/kiisoo/ic/store/mapper/PoiStoreDOMapper.java index ddeded2..d546ec3 100644 --- a/src/main/java/com/kiisoo/ic/store/mapper/PoiStoreDOMapper.java +++ b/src/main/java/com/kiisoo/ic/store/mapper/PoiStoreDOMapper.java @@ -41,4 +41,6 @@ public interface PoiStoreDOMapper extends BaseMapper { String selectStoreQrCode(@Param("shopId")Long shopId); List selectShopByNameOrCode (@Param("name") String name); + + List selectShopByCustomerIds(@Param("customerIds")List customerIds); } diff --git a/src/main/java/com/kiisoo/ic/store/service/StoreEmployeeService.java b/src/main/java/com/kiisoo/ic/store/service/StoreEmployeeService.java index cf22589..278f159 100644 --- a/src/main/java/com/kiisoo/ic/store/service/StoreEmployeeService.java +++ b/src/main/java/com/kiisoo/ic/store/service/StoreEmployeeService.java @@ -1,10 +1,12 @@ package com.kiisoo.ic.store.service; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.kiisoo.aegis.common.faces.util.HttpUtil; import com.kiisoo.ic.common.utils.ExcelUtils; +import com.kiisoo.ic.common.utils.MD5FileUtil; import com.kiisoo.ic.customer.entity.OpSellerCustomerRelation; import com.kiisoo.ic.customer.mapper.OpSellerCustomerRelationDOMapper; import com.kiisoo.ic.department.entity.DepartmentDO; @@ -12,17 +14,15 @@ import com.kiisoo.ic.department.mapper.PrivilageDepartmentDOMapper; import com.kiisoo.ic.domain.service.PrivilageDomainService; import com.kiisoo.ic.employee.entity.EmployeeDO; 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.service.EmployeeService; import com.kiisoo.ic.generalize.entity.PrivilageOrganizational; -import com.kiisoo.ic.generalize.entity.PrivilageOrganizationalMember; import com.kiisoo.ic.generalize.service.RetailCompanyService; import com.kiisoo.ic.generalize.mapper.RetailCompanyMapper; +import com.kiisoo.ic.store.bean.BsdShareCodeResponse; import com.kiisoo.ic.store.bean.PoiStoreStaffDTO; import com.kiisoo.ic.store.entity.PoiStore; import com.kiisoo.ic.store.entity.PoiStoreStaff; -import com.kiisoo.ic.store.entity.PrivilageCpUserStoreDO; import com.kiisoo.ic.store.entity.StoreUserDTO; import com.kiisoo.ic.store.mapper.PoiStoreDOMapper; import com.kiisoo.ic.store.mapper.PoiStoreStaffDOMapper; @@ -35,7 +35,6 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -46,11 +45,10 @@ import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; +import java.text.SimpleDateFormat; import java.util.*; import java.util.List; import java.util.stream.Collectors; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; import static com.kiisoo.ic.employee.constant.Constants.ADD_CP_CODE_BINDED; import static com.kiisoo.ic.store.constant.Constants.*; @@ -229,6 +227,98 @@ public class StoreEmployeeService { zipFile.delete(); } } + /** + * 批量下载店铺二维码 + * @param response + */ + public void downloadStoreUserCodeFromBSD(HttpServletResponse response) throws Exception { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + //查询所有公司 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status",1).eq("type",1).eq("level",2); + List privilageOrganizationals = retailCompanyMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(privilageOrganizationals)){ + //根文件夹用于存放公司 + String fileUrl = "门店码-"+UUID.randomUUID().toString().replace("-", ""); + File file = new File(fileUrl); + file.mkdir(); + // 生成的ZIP文件名 + String strZipName = "store_qrCode_"+ fileUrl +".zip"; + FileOutputStream out = new FileOutputStream(new File(strZipName)); + + //遍历零售公司 + for (PrivilageOrganizational privilageOrganizational:privilageOrganizationals) { + if (privilageOrganizational == null || privilageOrganizational.getId() == null){ + continue; + } + + //创建零售公司文件夹 + File complayFile = new File(file.getPath()+"/"+privilageOrganizational.getName()); + complayFile.mkdir(); + //查询客户 + QueryWrapper customerWrap = new QueryWrapper<>(); + customerWrap.eq("status",1).eq("type",1).eq("level",3).eq("parent_id",privilageOrganizational.getId()); + List customerList = retailCompanyMapper.selectList(customerWrap); + if (CollectionUtils.isNotEmpty(customerList)){ + List customerIds = customerList.stream().map(i -> i.getId()).collect(Collectors.toList()); + //查询店铺 + List poiStores = poiStoreDOMapper.selectShopByCustomerIds(customerIds); + if (CollectionUtils.isNotEmpty(poiStores)){ + //遍历店铺查询门店码url + for (PoiStore poiStore:poiStores){ + String cpUserId = privilageCpUserStoreDOMapper.selectCpUserIdByStoreId(poiStore.getId()); + if (StringUtils.isBlank(cpUserId)){ + continue; + } + Map params = new HashMap<>(); + params.put("userId",cpUserId); + params.put("type",0); + 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); + JSONObject saveAccountInputJSON = JSONObject.parseObject(get); + BsdShareCodeResponse bsdResponse = saveAccountInputJSON.toJavaObject(BsdShareCodeResponse.class); + + String url = bsdResponse.getData(); + if (StringUtils.isBlank(url)){ + continue; + } + //下载图片 + BufferedInputStream in = new BufferedInputStream(employeeService.getInputStream(url)); + //字节流转图片对象 + Image bi = ImageIO.read(in); + //构建图片流 + BufferedImage tag = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB); + //绘制改变尺寸后的图 + tag.getGraphics().drawImage(bi, 0, 0, 300, 300, null); + //输出流 + BufferedOutputStream image = new BufferedOutputStream(new FileOutputStream(complayFile.getPath() +"/" +poiStore.getCode() + ".png")); + + ImageIO.write(tag, "PNG", image); + + in.close(); + image.close(); + } + } + } + } + + //将根文件转换为zip文件 + ZipUtils.toZip(file.getPath(),out,true); + + //将文件输入到response + ServletOutputStream outputStream = response.getOutputStream(); + byte[] buffer = new byte[1024]; + File zipFile = new File(strZipName); + FileInputStream inStream = new FileInputStream(zipFile); + int lenNew; + while ((lenNew = inStream.read(buffer)) > 0) { + outputStream.write(buffer, 0, lenNew); + } + //删除文件,清理空间 + file.delete(); + zipFile.delete(); + } + } /** * 批量下载店铺导购吗 * @param response @@ -311,6 +401,110 @@ public class StoreEmployeeService { zipFile.delete(); } } + /** + * 批量下载店铺导购吗 + * @param response + */ + public void downloadStoreStaffCodeFromBSD(HttpServletResponse response) throws Exception { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + //查询所有公司 + List privilageOrganizationals = retailCompanyMapper.selectList(null); + if (CollectionUtils.isNotEmpty(privilageOrganizationals)){ + //根文件夹用于存放公司 + String fileUrl = "导购码-"+UUID.randomUUID().toString().replace("-", ""); + File file = new File(fileUrl); + file.mkdir(); + // 生成的ZIP文件名 + String strZipName = "store_qrCode_"+ fileUrl +".zip"; + FileOutputStream out = new FileOutputStream(new File(strZipName)); + + //遍历零售公司 + for (PrivilageOrganizational privilageOrganizational:privilageOrganizationals) { + if (privilageOrganizational == null || privilageOrganizational.getId() == null){ + continue; + } + + //创建零售公司文件夹 + File complayFile = new File(file.getPath()+"/"+privilageOrganizational.getName()); + complayFile.mkdir(); + QueryWrapper customerWrap = new QueryWrapper<>(); + customerWrap.eq("status",1).eq("type",1).eq("level",3).eq("parent_id",privilageOrganizational.getId()); + List customerList = retailCompanyMapper.selectList(customerWrap); + if (CollectionUtils.isNotEmpty(customerList)) { + List customerIds = customerList.stream().map(i -> i.getId()).collect(Collectors.toList()); + //查询店铺 + List poiStores = poiStoreDOMapper.selectShopByCustomerIds(customerIds); + if (CollectionUtils.isNotEmpty(poiStores)){ + //遍历店铺查询门店码url + for (PoiStore poiStore:poiStores){ + //创建零售公司文件夹 + File storeFile = new File(complayFile.getPath()+"/"+poiStore.getName()); + storeFile.mkdir(); + + QueryWrapper staffQr = new QueryWrapper(); + staffQr.eq(DATABASE_STORE_ID_KEY,poiStore.getId()); + staffQr.eq(DATABASE_TYPE_KEY,TYPE_STAFF_SELLER); + List poiStoreStaffs = poiStoreStaffDOMapper.selectList(staffQr); + if (CollectionUtils.isNotEmpty(poiStoreStaffs)){ + for (PoiStoreStaff poiStoreStaff:poiStoreStaffs){ + String cpUserId = privilageCpUserStoreDOMapper.selectCpUserIdByStoreId(poiStore.getId()); + if (StringUtils.isBlank(cpUserId)){ + continue; + } + Map params = new HashMap<>(); + params.put("userId",cpUserId); + params.put("type",1); + params.put("state",poiStoreStaff.getStaffCode()); + 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); + JSONObject saveAccountInputJSON = JSONObject.parseObject(get); + BsdShareCodeResponse bsdResponse = saveAccountInputJSON.toJavaObject(BsdShareCodeResponse.class); + + String url = bsdResponse.getData(); + if (StringUtils.isBlank(url)){ + continue; + } + + //下载图片 + BufferedInputStream in = new BufferedInputStream(employeeService.getInputStream(url)); + //字节流转图片对象 + Image bi = ImageIO.read(in); + //构建图片流 + BufferedImage tag = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB); + //绘制改变尺寸后的图 + tag.getGraphics().drawImage(bi, 0, 0, 300, 300, null); + //输出流 + BufferedOutputStream image = new BufferedOutputStream(new FileOutputStream(storeFile.getPath() +"/" +poiStoreStaff.getStaffCode() + ".png")); + + ImageIO.write(tag, "PNG", image); + + in.close(); + image.close(); + } + } + } + } + } + + } + + //将根文件转换为zip文件 + ZipUtils.toZip(file.getPath(),out,true); + + //将文件输入到response + ServletOutputStream outputStream = response.getOutputStream(); + byte[] buffer = new byte[1024]; + File zipFile = new File(strZipName); + FileInputStream inStream = new FileInputStream(zipFile); + int lenNew; + while ((lenNew = inStream.read(buffer)) > 0) { + outputStream.write(buffer, 0, lenNew); + } + //删除文件,清理空间 + file.delete(); + zipFile.delete(); + } + } /** * 导入excel门店号 diff --git a/src/main/java/com/kiisoo/ic/store/service/StorePromotionDataService.java b/src/main/java/com/kiisoo/ic/store/service/StorePromotionDataService.java index b1b60d9..f63f9c7 100644 --- a/src/main/java/com/kiisoo/ic/store/service/StorePromotionDataService.java +++ b/src/main/java/com/kiisoo/ic/store/service/StorePromotionDataService.java @@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.kiisoo.aegis.common.faces.util.HttpUtil; +import com.kiisoo.ic.common.utils.MD5FileUtil; import com.kiisoo.ic.config.WxCpConfiguration; import com.kiisoo.ic.domain.service.PrivilageDomainService; import com.kiisoo.ic.store.constant.Constants; @@ -22,10 +24,7 @@ import org.springframework.transaction.annotation.Transactional; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Comparator; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -243,7 +242,7 @@ public class StorePromotionDataService { Date endDate = sdf.parse("2020-04-12"); wxCusInfoReqDO.setStart_time(startDate.getTime()/1000); wxCusInfoReqDO.setEnd_time(endDate.getTime()/1000); - WxCusInfoRespDO wxCusInfoRespDO = getWxCusInfo(wxCusInfoReqDO); + WxCusInfoRespDO wxCusInfoRespDO = getWxCusInfoBSD(wxCusInfoReqDO); if (wxCusInfoRespDO.getNegative_feedback_cnt() == Constants.CONTACT_COUNT_ZERO && wxCusInfoRespDO.getNew_contact_cnt() == Constants.CONTACT_COUNT_ZERO) { return; @@ -257,6 +256,8 @@ public class StorePromotionDataService { } } catch (WxErrorException | ParseException e) { log.error("请求企业微信api获取客户统计数据或日期转换出错!", e); + } catch (Exception e) { + e.printStackTrace(); } }); } @@ -278,6 +279,26 @@ public class StorePromotionDataService { return JSONObject.parseObject(behavior_data[0], WxCusInfoRespDO.class); } + /** + * 获取联系客户统计数据 + * + * @param wxCusInfoReqDO + * @return + * @throws WxErrorException + */ + public WxCusInfoRespDO getWxCusInfoBSD(WxCusInfoReqDO wxCusInfoReqDO) throws Exception { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Map params = new HashMap<>(); + params.put("start_time",wxCusInfoReqDO.getStart_time()); + params.put("end_time",wxCusInfoReqDO.getEnd_time()); + params.put("userid",wxCusInfoReqDO.getUserid()); + String result = HttpUtil.get("http://vtest.bsd.cn/BSD_WXAPP/qyWechat/getUserBehaviorData?token==BOSIDENG" + MD5FileUtil.getMD5String(sdf.format(new Date())), params); + JSONObject parseObject = JSON.parseObject(result); + System.out.println(parseObject); + String[] behavior_data = JSONObject.parseObject(parseObject.getString("behavior_data"), String[].class); + return JSONObject.parseObject(behavior_data[0], WxCusInfoRespDO.class); + } + /** * 查询门店推广数据列表 手机端 * @param userId diff --git a/src/main/resources/mapper/PoiStoreDOMapper.xml b/src/main/resources/mapper/PoiStoreDOMapper.xml index 6f1a80e..eb7aaf4 100644 --- a/src/main/resources/mapper/PoiStoreDOMapper.xml +++ b/src/main/resources/mapper/PoiStoreDOMapper.xml @@ -41,6 +41,26 @@ and t1.org_id = #{orgId} +