From 59ceca5588fedd5ff3d9ef3dbb8a8c3c6c354eb6 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 10 Jul 2023 18:53:18 +0800 Subject: [PATCH 01/19] fix poi --- .../basic/TtMerchantPoiController.java | 6 +-- .../iformall/controller/mem/AsyncTask.java | 43 ++++++++++++++++--- .../com/iformall/domain/vo/MerchantPoiT.java | 4 ++ .../iformall/domain/vo/MerchantPoiTNew.java | 21 +++++---- .../iformall/mapper/TtMerchantPoiMapper.java | 3 ++ .../service/TtMerchantPoiService.java | 3 ++ .../impl/TtMerchantPoiServiceImpl.java | 5 +++ .../resources/mapper/TtMerchantPoiMapper.xml | 11 +++++ 8 files changed, 76 insertions(+), 20 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java index 721376afc..9c6c83645 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java @@ -259,7 +259,7 @@ public class TtMerchantPoiController extends DouyinBaseController { //return addLocationInfo(mFile,false); throw new MallinkException(Result.ERROR,"当前版本无需补齐地理位置信息"); }else { - addLocationInfo(mFile,true,"1bdc087fc6f72820dc5c848a033de7f9",request,response); + addLocationInfo(this.getTenantInfo(),mFile,true,"1bdc087fc6f72820dc5c848a033de7f9",request,response); } } catch (Exception e) { logger.error("addLocationInfo error.",e); @@ -267,7 +267,7 @@ public class TtMerchantPoiController extends DouyinBaseController { } } - private void addLocationInfo(MultipartFile mFile,boolean isNew,String gaodeKey, + private void addLocationInfo(TenantEntity tenantEntity,MultipartFile mFile,boolean isNew,String gaodeKey, HttpServletRequest request, HttpServletResponse response) throws Exception{ if (mFile.isEmpty()) { throw new MallinkException(Result.ERROR, "上传文件不能为空"); @@ -319,7 +319,7 @@ public class TtMerchantPoiController extends DouyinBaseController { } } if (isNew) { - asyncTask.exportExcelPoiDataAddLocationForNew(gaodeKey,lFile,request,response); + asyncTask.exportExcelPoiDataAddLocationForNew(tenantEntity,gaodeKey,lFile,request,response); }else { } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 4a3692fa1..453961ce9 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -11,7 +11,10 @@ import cn.afterturn.easypoi.handler.inter.IExcelDataHandler; import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.iformall.common.ErrorCode; import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.TtMerchantPoi; +import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.WxTags; +import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.CUserBaseInfoT; import com.iformall.domain.vo.GaoDePoiInfo; import com.iformall.domain.vo.MerchantPoiT; @@ -21,6 +24,7 @@ import com.iformall.exception.MallinkException; import com.iformall.service.TtMerchantPoiService; import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCouponPasswordService; +import com.iformall.service.WxMerchantService; import com.iformall.service.WxTagsService; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -36,7 +40,9 @@ import org.springframework.stereotype.Component; import java.io.File; import java.io.OutputStream; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; import javax.servlet.http.HttpServletRequest; @@ -60,6 +66,9 @@ public class AsyncTask { @Autowired StringRedisTemplate stringRedisTemplate; + + @Autowired + private WxMerchantService wxMerchantService; private class UserExcelHandler extends ExcelDataHandlerDefaultImpl { @Override @@ -237,10 +246,10 @@ public class AsyncTask { } } - public void exportExcelPoiDataAddLocationForNew(String gaodeKey,File file,HttpServletRequest request, HttpServletResponse response) throws Exception { + public void exportExcelPoiDataAddLocationForNew(TenantEntity tenantEntity,String gaodeKey,File file,HttpServletRequest request, HttpServletResponse response) throws Exception { ImportParams params = new ImportParams(); // 需要验证 - String[] headers = new String[]{"富茂系统商户ID", "富茂系统商户名称","门店名称", "门店ID", "城市", "详细地址","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注"}; + String[] headers = new String[]{"门店名称", "门店ID", "城市", "详细地址","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注","管理员手机号"}; params.setImportFields(headers); IExcelDataHandler handler = new AsyncTask.PoiNewExcelHandler(); handler.setNeedHandlerFields(new String[]{"门店名称", "门店ID", "城市", "详细地址"}); @@ -266,7 +275,17 @@ public class AsyncTask { List successList = datalist.getList(); //List failList = datalist.getFailList(); if(null != successList && successList.size() > 0 ) { - try { + //查询所有匹配了poi的 + TtMerchantPoi poiQ = new TtMerchantPoi(); + poiQ.updateTenantInfo(tenantEntity); + Map poiMerchantIdMap = ttMerchantPoiService.queryPoiMerchantIdMap(poiQ); + + //查询所有商户 + WxMerchant merchantQ = new WxMerchant(); + merchantQ.updateTenantInfo(tenantEntity); + Map merchantMap = wxMerchantService.findMerchantMap(merchantQ); + + try { successList.parallelStream().forEach(poiBase -> { try { if (StringUtils.isNotBlank(poiBase.getProvince()) && StringUtils.isNotBlank(poiBase.getCity()) @@ -289,6 +308,18 @@ public class AsyncTask { poiBase.setGaodeRemark("未匹配到信息"); } } + String poiId = poiBase.getPoiId(); + if (StringUtils.isNotBlank(poiId) && null != poiMerchantIdMap) { + Long merchantId = poiMerchantIdMap.get(poiId); + poiBase.setMerchantId(String.valueOf(merchantId)); + if (null != merchantMap && null != merchantId) { + WxMerchant m = merchantMap.get(merchantId); + if (null != m) { + poiBase.setMerchantName(m.getName()); + } + } + } + } catch (UnknownSessionException ue) { logger.error("session :"+ue.getMessage()); poiBase.setGaodeRemark("查询高德API失败"); @@ -298,7 +329,7 @@ public class AsyncTask { //exportParams.setCreateHeadRows(true); //exportParams.setExclusions(headers); Workbook workBook = ExcelExportUtil.exportExcel(exportParams, MerchantPoiTNew.class, successList); - exportExcel(request, response, workBook, "POI匹配模版-高德.xls"); + exportExcel(request, response, workBook, "POI匹配模版-高德.xlsx"); } catch (Exception e) { logger.error("更新地理信息失败:"+e.getMessage(),e); } @@ -321,10 +352,10 @@ public class AsyncTask { public void importExcelPoiDataForNew(File file, MallUserInfo user, String importKey) { ImportParams params = new ImportParams(); // 需要验证 - String[] headers = new String[]{"富茂系统商户ID", "富茂系统商户名称","门店名称", "门店ID", "城市", "详细地址","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注"}; + String[] headers = new String[]{"门店名称", "门店ID", "城市", "详细地址","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注","管理员手机号"}; params.setImportFields(headers); IExcelDataHandler handler = new AsyncTask.PoiNewExcelHandler(); - handler.setNeedHandlerFields(new String[]{"富茂系统商户ID","门店ID","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度"}); + handler.setNeedHandlerFields(new String[]{"门店ID","富茂系统商户ID","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度"}); params.setNeedVerify(true); ExcelImportResult datalist = null; diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java index 9a262d161..6f7501368 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java @@ -66,5 +66,9 @@ public class MerchantPoiT implements Serializable { @Excel(name = "其他信息", width = 20, orderNum = "15") @io.swagger.annotations.ApiModelProperty(value="其他信息",name="extra") private String extra; + + @Excel(name = "管理员手机号", width = 20, orderNum = "16") + @io.swagger.annotations.ApiModelProperty(value="管理员手机号",name="extra") + private String phone; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java index 813777ad4..82c32c1ba 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java @@ -12,25 +12,24 @@ import java.math.BigDecimal; @Data public class MerchantPoiTNew implements Serializable { - @Excel(name="富茂系统商户ID",width = 20,orderNum = "1") - @io.swagger.annotations.ApiModelProperty(value="富茂系统商户ID",name="merchantId") - private String merchantId; - @Excel(name="富茂系统商户名称",width = 20,orderNum = "2") - @io.swagger.annotations.ApiModelProperty(value="富茂系统商户名称",name="merchantName") - private String merchantName; - @Excel(name = "门店名称", width = 20, orderNum = "3") + @Excel(name = "门店名称", width = 20, orderNum = "1") @io.swagger.annotations.ApiModelProperty(value="来客门店名称",name="poiName") private String poiName; - @Excel(name="门店ID",width = 20,orderNum = "4") + @Excel(name="门店ID",width = 20,orderNum = "2") @io.swagger.annotations.ApiModelProperty(value="来客门店ID",name="poiId") private String poiId; - @Excel(name = "城市", width = 20, orderNum = "5") + @Excel(name = "城市", width = 20, orderNum = "3") @io.swagger.annotations.ApiModelProperty(value="来客门店城市",name="poiCity") private String poiCity; - @Excel(name = "详细地址", width = 20, orderNum = "6") + @Excel(name = "详细地址", width = 20, orderNum = "4") @io.swagger.annotations.ApiModelProperty(value="来客门店详细地址",name="poiAddress") private String poiAddress; - + @Excel(name="富茂系统商户ID",width = 20,orderNum = "5") + @io.swagger.annotations.ApiModelProperty(value="富茂系统商户ID",name="merchantId") + private String merchantId; + @Excel(name="富茂系统商户名称",width = 20,orderNum = "6") + @io.swagger.annotations.ApiModelProperty(value="富茂系统商户名称",name="merchantName") + private String merchantName; @Excel(name = "富茂系统省份", width = 20, orderNum = "7") @io.swagger.annotations.ApiModelProperty(value="富茂系统省份",name="province") private String province; diff --git a/mallinkService/src/main/java/com/iformall/mapper/TtMerchantPoiMapper.java b/mallinkService/src/main/java/com/iformall/mapper/TtMerchantPoiMapper.java index 41a821b41..1838435f6 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/TtMerchantPoiMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/TtMerchantPoiMapper.java @@ -4,6 +4,7 @@ import com.iformall.common.CommonMapper; import com.iformall.domain.po.TtMerchantPoi; import java.util.List; +import java.util.Map; public interface TtMerchantPoiMapper extends CommonMapper { @@ -14,5 +15,7 @@ public interface TtMerchantPoiMapper extends CommonMapper { List findTaskIdList(TtMerchantPoi record); int deleteByUpdate(Long id); + + Map findMerchantIdMap(TtMerchantPoi record); } diff --git a/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java b/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java index dee2a6e10..ded3cee1c 100644 --- a/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java +++ b/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java @@ -12,6 +12,7 @@ import com.iformall.douyin.web.api.goodlifesaas.TtGoodLifeSaasService; import com.iformall.douyin.web.api.web.TtWebService; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -70,4 +71,6 @@ public interface TtMerchantPoiService { void exportTemplate(HttpServletRequest request, HttpServletResponse response,boolean isNew); GaoDePoiInfo queryGaoDePoiInfo(String gaodeKey,String address); + + Map queryPoiMerchantIdMap(TtMerchantPoi merchantPoiQ); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java index 5aeaf1220..c55bf0549 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java @@ -775,6 +775,11 @@ public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { } return null; } + + @Override + public Map queryPoiMerchantIdMap(TtMerchantPoi merchantPoiQ) { + return ttMerchantPoiMapper.findMerchantIdMap(merchantPoiQ); + } // @Override diff --git a/mallinkService/src/main/resources/mapper/TtMerchantPoiMapper.xml b/mallinkService/src/main/resources/mapper/TtMerchantPoiMapper.xml index 3c312bd26..b01b5e5b3 100644 --- a/mallinkService/src/main/resources/mapper/TtMerchantPoiMapper.xml +++ b/mallinkService/src/main/resources/mapper/TtMerchantPoiMapper.xml @@ -140,6 +140,17 @@ from tt_merchant_poi + + update tt_merchant_poi set is_del = 1 From bdeefec4db3f603b8390187e677ea1480ee98e7b Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 10 Jul 2023 19:19:20 +0800 Subject: [PATCH 02/19] fix poi --- .../src/main/java/com/iformall/domain/vo/MerchantPoiT.java | 4 ---- .../src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java index 6f7501368..9a262d161 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java @@ -66,9 +66,5 @@ public class MerchantPoiT implements Serializable { @Excel(name = "其他信息", width = 20, orderNum = "15") @io.swagger.annotations.ApiModelProperty(value="其他信息",name="extra") private String extra; - - @Excel(name = "管理员手机号", width = 20, orderNum = "16") - @io.swagger.annotations.ApiModelProperty(value="管理员手机号",name="extra") - private String phone; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java index 82c32c1ba..90731246c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java @@ -48,5 +48,8 @@ public class MerchantPoiTNew implements Serializable { @Excel(name = "高德匹配备注", width = 20, orderNum = "12") @io.swagger.annotations.ApiModelProperty(value="高德匹配备注",name="gaodeRemark") private String gaodeRemark; + @Excel(name = "管理员手机号", width = 20, orderNum = "13") + @io.swagger.annotations.ApiModelProperty(value="管理员手机号",name="phone") + private String phone; } From 5e52c716da0f258ff5cc47a10f59d7df06ae865b Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 10 Jul 2023 19:52:40 +0800 Subject: [PATCH 03/19] fix poi --- .../com/iformall/mapper/TtMerchantPoiMapper.java | 2 -- .../service/impl/TtMerchantPoiServiceImpl.java | 13 ++++++++++++- .../main/resources/mapper/TtMerchantPoiMapper.xml | 11 ----------- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/mapper/TtMerchantPoiMapper.java b/mallinkService/src/main/java/com/iformall/mapper/TtMerchantPoiMapper.java index 1838435f6..b39fddc73 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/TtMerchantPoiMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/TtMerchantPoiMapper.java @@ -16,6 +16,4 @@ public interface TtMerchantPoiMapper extends CommonMapper { int deleteByUpdate(Long id); - Map findMerchantIdMap(TtMerchantPoi record); - } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java index c55bf0549..d0b98893c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java @@ -778,7 +778,18 @@ public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { @Override public Map queryPoiMerchantIdMap(TtMerchantPoi merchantPoiQ) { - return ttMerchantPoiMapper.findMerchantIdMap(merchantPoiQ); + List poiList = ttMerchantPoiMapper.findList(merchantPoiQ); + if (null != poiList) { + Map poiMerchantIdMap = new HashMap(); + for (int i = 0 ; i < poiList.size(); i++) { + TtMerchantPoi poi = poiList.get(i); + if (StringUtils.isNotBlank(poi.getPoiId())) { + poiMerchantIdMap.put(poi.getPoiId(), poi.getId()); + } + } + return poiMerchantIdMap; + } + return null; } diff --git a/mallinkService/src/main/resources/mapper/TtMerchantPoiMapper.xml b/mallinkService/src/main/resources/mapper/TtMerchantPoiMapper.xml index b01b5e5b3..7201d039a 100644 --- a/mallinkService/src/main/resources/mapper/TtMerchantPoiMapper.xml +++ b/mallinkService/src/main/resources/mapper/TtMerchantPoiMapper.xml @@ -141,17 +141,6 @@ - - update tt_merchant_poi set is_del = 1 where id = #{id} From e305fb3610b904e12e98ff425535f1d71931a841 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 10 Jul 2023 20:02:55 +0800 Subject: [PATCH 04/19] fix bug --- .../src/main/java/com/iformall/controller/mem/AsyncTask.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 453961ce9..396470945 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -311,7 +311,9 @@ public class AsyncTask { String poiId = poiBase.getPoiId(); if (StringUtils.isNotBlank(poiId) && null != poiMerchantIdMap) { Long merchantId = poiMerchantIdMap.get(poiId); - poiBase.setMerchantId(String.valueOf(merchantId)); + if (null != merchantId) { + poiBase.setMerchantId(String.valueOf(merchantId)); + } if (null != merchantMap && null != merchantId) { WxMerchant m = merchantMap.get(merchantId); if (null != m) { From 6ab02a80fec2a3a8aaf4a3e03af9e759d569331a Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Mon, 10 Jul 2023 20:16:58 +0800 Subject: [PATCH 05/19] fix bug --- .../src/main/java/com/iformall/controller/mem/AsyncTask.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 396470945..63464be4d 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -340,7 +340,8 @@ public class AsyncTask { private static void exportExcel(HttpServletRequest request, HttpServletResponse response, Workbook wb, String fileName) throws Exception { response.setContentType("application/octet-stream;charset=UTF-8"); - response.setHeader("Content-Type", "application/vnd.ms-excel"); + //response.setHeader("Content-Type", "application/vnd.ms-excel");//xls + response.setHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");//xlsx response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("GB2312"), "8859_1")); response.addHeader("Pargam", "no-cache"); response.addHeader("Cache-Control", "no-cache"); From fb436c10dde6f3627fd185a5385770ea31343aeb Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 11 Jul 2023 16:28:09 +0800 Subject: [PATCH 06/19] fix bug --- .../basic/TtMerchantPoiController.java | 34 +- .../iformall/controller/mem/AsyncTask.java | 88 ++-- .../com/iformall/domain/vo/MerchantPoiT.java | 4 + .../iformall/domain/vo/MerchantPoiTNew.java | 26 +- .../service/TtMerchantPoiService.java | 4 +- .../impl/TtMerchantPoiServiceImpl.java | 473 +----------------- .../park/impl/ketuo/KeTuoParkService.java | 15 +- 7 files changed, 96 insertions(+), 548 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java index 9c6c83645..dda785525 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java @@ -329,13 +329,13 @@ public class TtMerchantPoiController extends DouyinBaseController { @TenantIgnore @PostMapping(value = "/importPoi", consumes = "multipart/*") @SystemControllerLog(description = "poi-导入数据") - public ResultData importPoi(@RequestParam("file") MultipartFile mFile) { + public void importPoi(@RequestParam("file") MultipartFile mFile,HttpServletRequest request, HttpServletResponse response) { try { boolean isSaas = this.isGoodLifeSaas(); if (!isSaas) { - return processImport(mFile,false); + processImport(mFile,false,request,response); }else { - return processImport(mFile,true); + processImport(mFile,true,request,response); } } catch (Exception e) { logger.error("allTreeList error.",e); @@ -343,7 +343,7 @@ public class TtMerchantPoiController extends DouyinBaseController { } } - private ResultData processImport(MultipartFile mFile,boolean isNew) { + private void processImport(MultipartFile mFile,boolean isNew,HttpServletRequest request, HttpServletResponse response) throws Exception { logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::importPoi"); if (mFile.isEmpty()) { throw new MallinkException(Result.ERROR, "上传文件不能为空"); @@ -356,14 +356,10 @@ public class TtMerchantPoiController extends DouyinBaseController { //查询当前用户得到的值是否为空,为空继续,不为空,返回模板正在导入 Boolean allCount = stringRedisTemplate.opsForHash().hasKey(importKey, "allCount"); if (allCount) { - return new ResultData(Result.SUCCESS, "模板正在导入"); + throw new MallinkException(Result.SUCCESS, "模板正在导入"); } stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", 0 + ""); - stringRedisTemplate.expire(importKey,30, TimeUnit.MINUTES); - stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allSuccessCount", 0 + ""); - stringRedisTemplate.opsForHash().putIfAbsent(importKey, "processCount", ""); - stringRedisTemplate.opsForHash().putIfAbsent(importKey, "failCount", ""); String fpath = fmUploadDir; File targetFile = new File(fpath); @@ -391,9 +387,8 @@ public class TtMerchantPoiController extends DouyinBaseController { } catch (Exception e) { stringRedisTemplate.expire(importKey,3,TimeUnit.SECONDS); stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); - stringRedisTemplate.opsForHash().putIfAbsent(importKey, "failCount", "1"); - logger.error(e.getMessage()); - return new ResultData(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); + logger.error("poi import error.",e); + throw new MallinkException(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); } finally { if (fos != null) { try { @@ -401,9 +396,8 @@ public class TtMerchantPoiController extends DouyinBaseController { } catch (IOException e) { stringRedisTemplate.expire(importKey,3,TimeUnit.SECONDS); stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); - stringRedisTemplate.opsForHash().putIfAbsent(importKey, "failCount", "1"); - logger.error(e.getMessage()); - return new ResultData(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); + logger.error("poi import error.",e); + throw new MallinkException(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); } } if (fs != null) { @@ -412,19 +406,17 @@ public class TtMerchantPoiController extends DouyinBaseController { } catch (IOException e) { stringRedisTemplate.expire(importKey,3,TimeUnit.SECONDS); stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); - stringRedisTemplate.opsForHash().putIfAbsent(importKey, "failCount", "1"); - logger.error(e.getMessage()); - return new ResultData(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); + logger.error("poi import error.",e); + throw new MallinkException(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); } } } if (isNew) { - asyncTask.importExcelPoiDataForNew(lFile, user, importKey); + asyncTask.importExcelPoiDataForNew(lFile, user, importKey,request,response); }else { - asyncTask.importExcelPoiData(lFile, user, importKey); + asyncTask.importExcelPoiData(lFile, user, importKey,request,response); } - return new ResultData(Result.SUCCESS, "模板正在导入"); } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 63464be4d..67d7bd7ec 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -4,6 +4,7 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; import cn.afterturn.easypoi.handler.impl.ExcelDataHandlerDefaultImpl; import cn.afterturn.easypoi.handler.inter.IExcelDataHandler; @@ -187,11 +188,11 @@ public class AsyncTask { } @Async - public void importExcelPoiData(File file, MallUserInfo user, String importKey) { + public void importExcelPoiData(File file, MallUserInfo user, String importKey,HttpServletRequest request, HttpServletResponse response) { ImportParams params = new ImportParams(); // 需要验证 params.setImportFields(new String[]{"服务商POI_ID", "POI名称", "省份", "城市", "地址", "经度", "纬度", "高德ID(非必填)", - "已匹配POI_ID", "已匹配POI名称", "已匹配POI省份", "已匹配POI城市", "已匹配POI地址", "未匹配原因", "其他信息"}); + "已匹配POI_ID", "已匹配POI名称", "已匹配POI省份", "已匹配POI城市", "已匹配POI地址", "未匹配原因", "其他信息","POI导入结果"}); IExcelDataHandler handler = new AsyncTask.PoiExcelHandler(); handler.setNeedHandlerFields(new String[]{"服务商POI_ID","已匹配POI_ID"}); params.setNeedVerify(true); @@ -201,8 +202,8 @@ public class AsyncTask { try { datalist = ExcelImportUtil.importExcelMore(file, MerchantPoiT.class, params); } catch (Exception e) { - set_redis_value(importKey, "1", "0", "0", "1", true); - logger.error(e.getMessage()); + logger.error(e.getMessage(),e); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); // 删除缓存文件 file.delete(); return; @@ -211,24 +212,13 @@ public class AsyncTask { file.delete(); if(datalist == null) { - logger.error("导入模板失败: 模板数据解析失败"); - set_redis_value(importKey, "1", "0", "0", "1", true); + logger.error("导入模板失败: 模板数据解析失败"); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); return; } List successList = datalist.getList(); - List failList = datalist.getFailList(); - - logger.info("验证通过的数量: " + successList.size()); - logger.info("验证未通过的数量: " + failList.size()); - - int total = successList.size() + failList.size(); - int all_success = successList.size(); - int all_fail = failList.size(); - - //添加到redis里 - set_redis_value(importKey, "" + total, "" + all_success, "0", "" + all_fail, total == all_fail); - + if(successList.size() > 0) { try { successList.parallelStream().forEach(poiBase -> { @@ -238,10 +228,14 @@ public class AsyncTask { logger.error("session :"+ue.getMessage()); } }); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workBook = ExcelExportUtil.exportExcel(exportParams, MerchantPoiT.class, successList); + exportExcel(request, response, workBook, "POI导入-结果.xlsx"); } catch (Exception e) { - set_redis_value(importKey, "1", "0", "0", "1", true); - e.printStackTrace(); - logger.error("导入模板失败:"+e.getMessage()); + logger.error("导入模板失败:"+e.getMessage(),e); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); } } } @@ -249,7 +243,7 @@ public class AsyncTask { public void exportExcelPoiDataAddLocationForNew(TenantEntity tenantEntity,String gaodeKey,File file,HttpServletRequest request, HttpServletResponse response) throws Exception { ImportParams params = new ImportParams(); // 需要验证 - String[] headers = new String[]{"门店名称", "门店ID", "城市", "详细地址","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注","管理员手机号"}; + String[] headers = new String[]{"门店名称", "门店ID", "城市", "详细地址","管理员手机号","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注","POI导入日志"}; params.setImportFields(headers); IExcelDataHandler handler = new AsyncTask.PoiNewExcelHandler(); handler.setNeedHandlerFields(new String[]{"门店名称", "门店ID", "城市", "详细地址"}); @@ -312,9 +306,13 @@ public class AsyncTask { if (StringUtils.isNotBlank(poiId) && null != poiMerchantIdMap) { Long merchantId = poiMerchantIdMap.get(poiId); if (null != merchantId) { - poiBase.setMerchantId(String.valueOf(merchantId)); + if (merchantId > 0 ) { + poiBase.setMerchantId(String.valueOf(merchantId)); + }else { + poiBase.setMerchantId("多个商户已匹配该POI,请手动输入"); + } } - if (null != merchantMap && null != merchantId) { + if (null != merchantMap && null != merchantId && merchantId > 0) { WxMerchant m = merchantMap.get(merchantId); if (null != m) { poiBase.setMerchantName(m.getName()); @@ -328,8 +326,7 @@ public class AsyncTask { } }); ExportParams exportParams = new ExportParams(); - //exportParams.setCreateHeadRows(true); - //exportParams.setExclusions(headers); + exportParams.setType(ExcelType.XSSF); Workbook workBook = ExcelExportUtil.exportExcel(exportParams, MerchantPoiTNew.class, successList); exportExcel(request, response, workBook, "POI匹配模版-高德.xlsx"); } catch (Exception e) { @@ -352,13 +349,13 @@ public class AsyncTask { } @Async - public void importExcelPoiDataForNew(File file, MallUserInfo user, String importKey) { + public void importExcelPoiDataForNew(File file, MallUserInfo user, String importKey,HttpServletRequest request, HttpServletResponse response) { ImportParams params = new ImportParams(); // 需要验证 - String[] headers = new String[]{"门店名称", "门店ID", "城市", "详细地址","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注","管理员手机号"}; + String[] headers = new String[]{"门店名称", "门店ID", "城市", "详细地址","管理员手机号","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注","POI导入日志"}; params.setImportFields(headers); IExcelDataHandler handler = new AsyncTask.PoiNewExcelHandler(); - handler.setNeedHandlerFields(new String[]{"门店ID","富茂系统商户ID","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度"}); + handler.setNeedHandlerFields(new String[]{"门店ID","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度"}); params.setNeedVerify(true); ExcelImportResult datalist = null; @@ -366,8 +363,8 @@ public class AsyncTask { try { datalist = ExcelImportUtil.importExcelMore(file, MerchantPoiTNew.class, params); } catch (Exception e) { - set_redis_value(importKey, "1", "0", "0", "1", true); - logger.error(e.getMessage()); + logger.error("importExcelPoiDataForNew error.",e); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); // 删除缓存文件 file.delete(); return; @@ -377,36 +374,29 @@ public class AsyncTask { if(datalist == null) { logger.error("导入模板失败: 模板数据解析失败"); - set_redis_value(importKey, "1", "0", "0", "1", true); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); return; } List successList = datalist.getList(); - List failList = datalist.getFailList(); - - logger.info("验证通过的数量: " + successList.size()); - logger.info("验证未通过的数量: " + failList.size()); - - int total = successList.size() + failList.size(); - int all_success = successList.size(); - int all_fail = failList.size(); - - //添加到redis里 - set_redis_value(importKey, "" + total, "" + all_success, "0", "" + all_fail, total == all_fail); - if(successList.size() > 0) { try { successList.parallelStream().forEach(poiBase -> { try { - ttMerchantPoiService.importOnePoiNew(user,importKey, poiBase); + ttMerchantPoiService.importOnePoiNew(user, poiBase); } catch (UnknownSessionException ue) { - logger.error("session :"+ue.getMessage()); + logger.error("session :"+ue.getMessage(),ue); } }); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workBook = ExcelExportUtil.exportExcel(exportParams, MerchantPoiTNew.class, successList); + exportExcel(request, response, workBook, "POI匹配模版-高德.xlsx"); + } catch (Exception e) { - set_redis_value(importKey, "1", "0", "0", "1", true); - e.printStackTrace(); - logger.error("导入模板失败:"+e.getMessage()); + logger.error("导入模板失败:"+e.getMessage(),e); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); } } } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java index 9a262d161..3ce7bdae8 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiT.java @@ -66,5 +66,9 @@ public class MerchantPoiT implements Serializable { @Excel(name = "其他信息", width = 20, orderNum = "15") @io.swagger.annotations.ApiModelProperty(value="其他信息",name="extra") private String extra; + + @Excel(name = "POI导入结果", width = 20, orderNum = "16") + @io.swagger.annotations.ApiModelProperty(value="POI导入结果",name="importRemark") + private String importRemark; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java index 90731246c..87f030135 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java @@ -24,32 +24,34 @@ public class MerchantPoiTNew implements Serializable { @Excel(name = "详细地址", width = 20, orderNum = "4") @io.swagger.annotations.ApiModelProperty(value="来客门店详细地址",name="poiAddress") private String poiAddress; - @Excel(name="富茂系统商户ID",width = 20,orderNum = "5") + @Excel(name = "管理员手机号", width = 20, orderNum = "5") + @io.swagger.annotations.ApiModelProperty(value="管理员手机号",name="phone") + private String phone; + @Excel(name="富茂系统商户ID",width = 20,orderNum = "6") @io.swagger.annotations.ApiModelProperty(value="富茂系统商户ID",name="merchantId") private String merchantId; - @Excel(name="富茂系统商户名称",width = 20,orderNum = "6") + @Excel(name="富茂系统商户名称",width = 20,orderNum = "7") @io.swagger.annotations.ApiModelProperty(value="富茂系统商户名称",name="merchantName") private String merchantName; - @Excel(name = "富茂系统省份", width = 20, orderNum = "7") + @Excel(name = "富茂系统省份", width = 20, orderNum = "8") @io.swagger.annotations.ApiModelProperty(value="富茂系统省份",name="province") private String province; - @Excel(name = "富茂系统城市", width = 20, orderNum = "8") + @Excel(name = "富茂系统城市", width = 20, orderNum = "9") @io.swagger.annotations.ApiModelProperty(value="富茂系统城市",name="city") private String city; - @Excel(name = "富茂系统地址", width = 20, orderNum = "9") + @Excel(name = "富茂系统地址", width = 20, orderNum = "10") @io.swagger.annotations.ApiModelProperty(value="富茂系统地址",name="address") private String address; - @Excel(name="富茂系统经度",width = 20,orderNum = "10") + @Excel(name="富茂系统经度",width = 20,orderNum = "11") @io.swagger.annotations.ApiModelProperty(value="富茂系统经度",name="longitude") private BigDecimal longitude; - @Excel(name = "富茂系统纬度", width = 20, orderNum = "11") + @Excel(name = "富茂系统纬度", width = 20, orderNum = "12") @io.swagger.annotations.ApiModelProperty(value="富茂系统纬度",name="latitude") private BigDecimal latitude; - @Excel(name = "高德匹配备注", width = 20, orderNum = "12") + @Excel(name = "高德匹配备注", width = 20, orderNum = "13") @io.swagger.annotations.ApiModelProperty(value="高德匹配备注",name="gaodeRemark") private String gaodeRemark; - @Excel(name = "管理员手机号", width = 20, orderNum = "13") - @io.swagger.annotations.ApiModelProperty(value="管理员手机号",name="phone") - private String phone; - + @Excel(name = "POI导入日志", width = 20, orderNum = "14") + @io.swagger.annotations.ApiModelProperty(value="POI导入日志",name="importRemark") + private String importRemark; } diff --git a/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java b/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java index ded3cee1c..fb75ada92 100644 --- a/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java +++ b/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java @@ -64,9 +64,9 @@ public interface TtMerchantPoiService { // ResultData spuStockSync(TenantEntity tenantInfo, Long couponChannelId); - void importOneMem(MallUserInfo user, String importKey, MerchantPoiT poiBase); + void importOneMem(MallUserInfo user, MerchantPoiT poiBase); - void importOnePoiNew(MallUserInfo user, String importKey, MerchantPoiTNew poiBase); + void importOnePoiNew(MallUserInfo user, MerchantPoiTNew poiBase); void exportTemplate(HttpServletRequest request, HttpServletResponse response,boolean isNew); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java index d0b98893c..47581d95b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java @@ -556,15 +556,13 @@ public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { } @Override - public void importOneMem(MallUserInfo user, String importKey, MerchantPoiT poiBase) { + public void importOneMem(MallUserInfo user, MerchantPoiT poiBase) { if (StringUtils.isBlank(poiBase.getMerchantId())) { - stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); - logger.error("服务商POI_ID为空", poiBase.toString()); + poiBase.setImportRemark("导入失败.服务商POI_ID为空"); return; } if (StringUtils.isBlank(poiBase.getPoiId())) { - stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); - logger.error("已匹配POI_ID为空", poiBase.toString()); + poiBase.setImportRemark("导入失败.已匹配POI_ID为空"); return; } @@ -598,31 +596,27 @@ public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { }else{ ttMerchantPoiMapper.updateById(merchantPoi); } + poiBase.setImportRemark("导入成功"); } catch (Exception e) { - stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); - logger.error(e.getMessage()); + logger.error("importOneMem error.",e); + poiBase.setImportRemark("导入失败."+e.getMessage()); return; } - - stringRedisTemplate.opsForHash().increment(importKey,"processCount",1); - stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); - } @Override - public void importOnePoiNew(MallUserInfo user, String importKey, MerchantPoiTNew poiBase) { - if (StringUtils.isBlank(poiBase.getMerchantId())) { - stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); - return; - } + public void importOnePoiNew(MallUserInfo user, MerchantPoiTNew poiBase){ if (StringUtils.isBlank(poiBase.getPoiId())) { - stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); - return; + poiBase.setImportRemark("导入失败.门店ID为空"); + return; } try { + TtMerchantPoi merchantPoi = null; + if (StringUtils.isNotBlank(poiBase.getMerchantId())) { + merchantPoi = ttMerchantPoiMapper.selectById(Long.parseLong(poiBase.getMerchantId())); + } Date now = new Date(); - TtMerchantPoi merchantPoi = ttMerchantPoiMapper.selectById(Long.parseLong(poiBase.getMerchantId())); if(merchantPoi == null){ merchantPoi = new TtMerchantPoi(); } @@ -640,6 +634,7 @@ public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { merchantPoi.setSyncStatus(EnumSupplierSyncStatus.sync_success.getCode()); merchantPoi.setLastSyncStatus(EnumSupplierSyncStatus.sync_success.getCode()); merchantPoi.setUpdateDate(now); + if(merchantPoi.getId() == null){ merchantPoi.setId(Long.parseLong(poiBase.getMerchantId())); merchantPoi.setCreateDate(now); @@ -647,57 +642,14 @@ public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { }else{ ttMerchantPoiMapper.updateById(merchantPoi); } + poiBase.setImportRemark("导入成功"); } catch (Exception e) { - stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); - logger.error(e.getMessage()); + logger.error(e.getMessage(),e); + poiBase.setImportRemark("导入失败."+e.getMessage()); return; } - - stringRedisTemplate.opsForHash().increment(importKey,"processCount",1); - stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); - } -// @Override -// public ResultData findPoi(TenantEntity tenantInfo, Long couponChannelId) { -// WxCouponChannel couponChannel = wxCouponChannelMapper.selectById(couponChannelId, tenantInfo.getTenantId()); -// if(couponChannel == null || !EnumCouponChannelStatus.STATUS_THROW_IN.getCode().equals(couponChannel.getStatus())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到上架卷数据"); -// } -// if(!EnumCouponChannelType.COUPON_CHANNEL_ID_DOUYIN_LIST.getCode().equals(couponChannel.getTargetAd())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"只有投放在列表的卷才能进行同步poi"); -// } -// WxCoupon coupon = wxCouponMapper.selectById(couponChannel.getCouponId(), tenantInfo.getTenantId()); -// if(coupon == null || !EnumCouponStatus.COUPON_STATUS_THROW_IN.getCode().equals(coupon.getStatus())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未找到可投放的卷"); -// } -// if(!EnumCouponType.getSpuSyncType().contains(coupon.getType())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"卷类型不支持同步poi"); -// } -//// List list = new ArrayList<>(); -//// TtMerchantPoi merchantPoi = ttMerchantPoiMapper.selectById(Long.parseLong(tenantInfo.getTenantId())); -////// TtMerchantPoi merchantPoi = ttMerchantPoiMapper.selectById(Long.parseLong("1038")); -//// list.add(merchantPoi); -// -// List merchantIds = wxCouponMerchantMapper.findMerchantIdListByProduct(coupon.getId(), tenantInfo.getTenantId()); -// if(merchantIds == null || merchantIds.size() == 0 ){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到门店"); -// } -// -// TtMerchantPoi poi = new TtMerchantPoi(); -// poi.updateTenantInfo(tenantInfo); -// poi.setIds(merchantIds); -// poi.setMatchStatus(EnumSupplierMathStatus.match_success.getCode()); -// poi.setSyncStatus(EnumSupplierSyncStatus.sync_success.getCode()); -// List poiList = ttMerchantPoiMapper.findList(poi); -// if(poiList != null && merchantIds.size() == poiList.size()){ -// return new ResultData(poiList); -// }else{ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"该商品店铺与poi门店不匹配"); -// } -// -// } - private void updateWebAccessToken(WxAppinfo appinfo, TtBasicService ttbasicService) { try { String accessToken = ttbasicService.getAccessToken(true); @@ -784,395 +736,16 @@ public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { for (int i = 0 ; i < poiList.size(); i++) { TtMerchantPoi poi = poiList.get(i); if (StringUtils.isNotBlank(poi.getPoiId())) { - poiMerchantIdMap.put(poi.getPoiId(), poi.getId()); + Long curMId = poiMerchantIdMap.get(poi.getPoiId()); + if (null == curMId) { + poiMerchantIdMap.put(poi.getPoiId(), poi.getId()); + }else { + poiMerchantIdMap.put(poi.getPoiId(), -1L); + } } } return poiMerchantIdMap; } return null; } - - -// @Override -// public ResultData spuSync(TenantEntity tenantInfo, Long couponChannelId, List merchantIds) { -// WxCouponChannel couponChannel = wxCouponChannelMapper.selectById(couponChannelId, tenantInfo.getTenantId()); -// if(couponChannel == null || !EnumCouponChannelStatus.STATUS_THROW_IN.getCode().equals(couponChannel.getStatus())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到上架卷数据"); -// } -// if(!EnumCouponChannelType.COUPON_CHANNEL_ID_DOUYIN_LIST.getCode().equals(couponChannel.getTargetAd())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"只有投放在列表的卷才能进行同步poi"); -// } -// WxCoupon coupon = wxCouponMapper.selectById(couponChannel.getCouponId(), tenantInfo.getTenantId()); -// if(coupon == null || !EnumCouponStatus.COUPON_STATUS_THROW_IN.getCode().equals(coupon.getStatus())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未找到可投放的卷"); -// } -// if(!EnumCouponType.getSpuSyncType().contains(coupon.getType())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"卷类型不支持同步poi"); -// } -// List couponMerchantIds = wxCouponMerchantMapper.findMerchantIdListByProduct(coupon.getId(), tenantInfo.getTenantId()); -// if(couponMerchantIds == null || couponMerchantIds.size() == 0 ){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到门店"); -// } -// -// TtMerchantPoi poi = new TtMerchantPoi(); -// poi.updateTenantInfo(tenantInfo); -// poi.setIds(couponMerchantIds); -// poi.setMatchStatus(EnumSupplierMathStatus.match_success.getCode()); -// poi.setSyncStatus(EnumSupplierSyncStatus.sync_success.getCode()); -// List poiList = ttMerchantPoiMapper.findList(poi); -// if(poiList == null || poiList.isEmpty()){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到匹配的poi"); -// } -//// List collect = poiList.stream().map(p -> p.getId()).collect(Collectors.toList()); -// -// String spuId = spuSync(coupon,couponChannel,couponMerchantIds); -// if(StringUtils.isBlank(spuId)){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"同步失败"); -// } -// WxCouponChannel ccUpd = new WxCouponChannel(); -// ccUpd.setId(couponChannel.getId()); -// ccUpd.updateTenantInfo(couponChannel); -// ccUpd.setTtSpuId(spuId); -// ccUpd.setUpdateDate(new Date()); -// wxCouponChannelMapper.updateById(ccUpd); -// -// syncCouponChannelPoi(ccUpd); -// return new ResultData(); -// } - -// private void syncCouponChannelPoi(WxCouponChannel ccUpd){ -// TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectById(ccUpd.getTenantId(),ccUpd.getId()); -// if(ttCouponChannelPoi != null){ -// ttCouponChannelPoi.setLastStatus(EnumSpuSyncStatus.sync_auditing.getCode()); -// ttCouponChannelPoi.setLastStatusDesc(""); -// ttCouponChannelPoi.setUpdateDate(ccUpd.getUpdateDate()); -// ttCouponChannelPoiMapper.updateById(ttCouponChannelPoi); -// }else{ -// ttCouponChannelPoi = new TtCouponChannelPoi(); -// ttCouponChannelPoi.setId(ccUpd.getId()); -// ttCouponChannelPoi.updateTenantInfo(ccUpd); -// ttCouponChannelPoi.setSpuId(ccUpd.getTtSpuId()); -// ttCouponChannelPoi.setStatus(EnumSpuSyncStatus.sync_auditing.getCode()); -// ttCouponChannelPoi.setLastStatus(EnumSpuSyncStatus.sync_auditing.getCode()); -// ttCouponChannelPoi.setCreateDate(ccUpd.getUpdateDate()); -// ttCouponChannelPoi.setUpdateDate(ccUpd.getUpdateDate()); -// ttCouponChannelPoiMapper.insert(ttCouponChannelPoi); -// } -// } - -// private String spuSync(WxCoupon coupon,WxCouponChannel couponChannel, List merchantIds){ -// TtSpuSync spuSync = new TtSpuSync(); -// spuSync.setEntryInfo(getEntryInfo(couponChannel)); -//// spuSync.setFrontCategoryTag();//前台品类标签 -//// spuSync.setRecommendWord();//推荐语,5~20个字 -//// spuSync.setSortWeight();//排序权重,按降序排列 -// List collect = merchantIds.stream().map(merchantId -> merchantId.toString()).collect(Collectors.toList()); -// spuSync.setSupplierExtIdList(collect); -// spuSync.setPrice(coupon.getSalePrice()); -// spuSync.setSpuExtId(couponChannel.getId().toString()); -// spuSync.setImageList(JSONArray.parseArray(coupon.getCoverPicture(),String.class)); -//// spuSync.setMpSettletype();//小程序结算类型 1-包销 2-代销 -// spuSync.setOriginPrice(coupon.getPrice()); -//// spuSync.setTakeRate();//商品的抽佣率,万分数 -// spuSync.setAttribute(getAttribute(coupon,couponChannel)); -//// spuSync.setHighlights(getHighlights(coupon)); -// spuSync.setName(coupon.getTitle()); -//// spuSync.setOrderDependsOnDate(false);//下单是否依赖日期 -// spuSync.setSpuType(91);//spu类型号,1-日历房,30-酒店民宿预售券,90-门票,91-团购券 -// if(EnumCouponChannelStatus.STATUS_THROW_IN.getCode().equals(couponChannel.getStatus())){ -// spuSync.setStatus(1); -// }else{ -// spuSync.setStatus(2); -// } -// spuSync.setStock(coupon.getRemainInventory()); -// -// String spuId = null; -// try { -// spuId = getTtWebService(coupon).getProductService().spuSync(spuSync); -// } catch (WxErrorException e) { -// logger.error("发起商品同步error"+e.getMessage()); -// throw new MallinkException(ErrorCode.MSG_METHOD_REQUEST_ERROR.getCode(),e.getMessage()); -// } -// return spuId; -// } - - //__________________________________商品同步_______________________________________________ - //获取入口信息 -// private JsonObject getEntryInfo(WxCouponChannel couponChannel){ -// JsonObject object = new JsonObject(); -// object.addProperty("entry_type",2);//入口类型(1:H5,2:抖音小程序,3:抖音链接) -// JsonObject miniApp = new JsonObject(); -// miniApp.addProperty("params",couponChannel.getTtparams()); -// miniApp.addProperty("path",couponChannel.getTtPath()); -// WxAppinfo appInfo = wxAppinfoService.getCAppInfo(couponChannel, EnumAppPlat.TOUTIAO); -// miniApp.addProperty("app_id",appInfo.getAppId()); -// object.add("entry_miniApp",miniApp); -// return object; -// } -// -// //获取SPU属性字段 -// private JsonObject getAttribute(WxCoupon coupon,WxCouponChannel couponChannel){ -//// JsonObject object = new JsonObject(); -// JsonObject productObjuct = new JsonObject(); -// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); -// productObjuct.addProperty("groupon_valid_start",dateFormat.format(couponChannel.getShowBeginTime()));//团购售卖时间开始 -// // todo 要求必传, 可能为空 -// productObjuct.addProperty("groupon_valid_end",dateFormat.format(coupon.getValidEndDate()));//******* -// -// productObjuct.addProperty("order_limit",coupon.getUseLimitQuantity());//单个用户购买数量限制 -// if(EnumCouponValidType.BETWEEN_TWO_TIME.getCode().equals(coupon.getValidType())){ -// productObjuct.addProperty("order_valid_start",dateFormat.format(coupon.getValidStartDate())); -// productObjuct.addProperty("order_valid_end",dateFormat.format(coupon.getValidEndDate())); -// }else if(EnumCouponValidType.DAYS_AFTER_RECEIVING.getCode().equals(coupon.getValidType())){ -// productObjuct.addProperty("post_purchase_day",coupon.getValidDays()); -// } -// //todo 商家客服电话 目前传的广场的客服电话 联系人广场名称 -// WxMall mall = wxMallMapper.getByTenantId(coupon.getTenantId()); -// JsonArray phoneArray = new JsonArray(); -// phoneArray.add(mall.getServicePhone()); -// productObjuct.add("service_phone",phoneArray); -// productObjuct.addProperty("contact_name",mall.getName()); -// -// //todo 团购须知 要求格式 标题加类容 是否二选一 待测试 -// JsonArray notificationArray = new JsonArray(); -//// for ( : ) { -// JsonObject contentObject = new JsonObject(); -// contentObject.addProperty("title","");//标题 -// contentObject.addProperty("content",coupon.getRemark());//内容 -// notificationArray.add(contentObject); -//// } -// productObjuct.add("notification",notificationArray); -// if(EnumCouponContentType.HTML.getCode().equals(coupon.getContentType())){ -// productObjuct.addProperty("notification_rich_text",coupon.getHtml()); -// } -// productObjuct.addProperty("sub_title",coupon.getSubTitle()); -// -// //todo 团购详情 要求必传, 待测试 -// if(StringUtils.isNotBlank(coupon.getItemGroup())){ -// JsonArray groupArray = new JsonParser().parse(coupon.getItemGroup()).getAsJsonArray(); -// productObjuct.add("pay_item_groups",groupArray); -// } -//// JsonArray groupArray = new JsonArray(); -//// for ( : ) { -//// JsonObject groupObject = new JsonObject(); -//// groupObject.addProperty("group_name","标题");//标题 -//// JsonArray itemArray = new JsonArray(); //菜品 -//// for (:) { -//// JsonObject itemObject = new JsonObject(); -//// itemObject.addProperty("name","菜名"); -//// itemObject.addProperty("count","数量"); -//// itemObject.addProperty("price","价格"); -//// itemArray.add(itemObject); -//// } -//// groupObject.add("item_list",itemArray); -//// groupArray.add(groupObject); -//// } -//// productObjuct.add("pay_item_groups",groupArray); -// -// //使用日期规则 -//// JsonObject dateRuleObject = new JsonObject(); -//// JsonObject unDateObject = new JsonObject();//不可用日期 -//// JsonArray dateArray = new JsonArray();//日期列表,格式yyyy-mm-dd,最多传100个 -//// JsonArray weekDayArray = new JsonArray();//星期列表,1-7代表周一到周天,[1,2]代表周一周二不可用 -//// unDateObject.add("date_list",dateArray); -//// unDateObject.add("weekday_list",weekDayArray); -//// dateRuleObject.add("unavailable_date",unDateObject); -//// productObjuct.add("date_rule",dateRuleObject); -// -// return productObjuct; -// } -// -// //商品亮点标签 -// private JsonArray getHighlights(WxCoupon coupon){ -// JsonArray array = new JsonArray(); -//// for (:) { -//// JsonObject object = new JsonObject(); -//// object.addProperty("content",);//介绍,字符串长度<=5 -//// object.addProperty("priority",);//优先级,数字越小优先级越高 -//// array.add(object); -//// } -// return array; -// } - - //_________________________________________________________________________________ - -// @Override -// public ResultData spuGet(TenantEntity tenantInfo, Long couponChannelId) { -// WxCouponChannel couponChannel = wxCouponChannelMapper.selectById(couponChannelId, tenantInfo.getTenantId()); -// if(couponChannel == null){ -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到卷数据"); -// } -// if(StringUtils.isBlank(couponChannel.getTtSpuId())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"该券未同步poi"); -// } -// TtSpuGet spuGet = new TtSpuGet(); -// spuGet.setSpuExtId(couponChannel.getId().toString()); -// spuGet.setNeedSpuDraft(true); -// spuGet.setSpuDraftcount(3); -// try { -// TtSpuGetResult spuGetResult = getTtWebService(tenantInfo).getProductService().spuGet(spuGet); -// handSyncCouponChannelPoi(tenantInfo,spuGetResult); -// //处理一下数据 -// Map map = new HashMap<>(); -// if(spuGetResult.getSpuDetail() != null){//线上数据 -// TtSpuSync spuDetail = spuGetResult.getSpuDetail(); -// map.put("spuDetail",handSpuSync(spuDetail)); -// } -// if(spuGetResult.getSpuDraft() != null && spuGetResult.getSpuDraft().size() > 0){//最近一次审核数据 -// TtSpuSync spuDraft = spuGetResult.getSpuDraft().get(0); -// map.put("spuDraft",handSpuSync(spuDraft)); -// } -// return new ResultData(map); -// } catch (WxErrorException e) { -// logger.error("couponChannelId:"+couponChannelId +" 多门店SPU信息查询error "+e.getMessage()); -// return new ResultData(ErrorCode.MSG_METHOD_REQUEST_ERROR.getCode(),e.getMessage()); -// } -// } -// -// private void handSyncCouponChannelPoi(TenantEntity tenantInfo,TtSpuGetResult spuGetResult){ -// Date now = new Date(); -// TtSpuSync spuDetail = spuGetResult.getSpuDetail(); -// if(spuDetail != null && StringUtils.isNotBlank(spuDetail.getSpuId()) && StringUtils.isNotBlank(spuDetail.getSpuExtId()) -// && spuDetail.getStatus() != null){ -// TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectById(tenantInfo.getTenantId(),Long.parseLong(spuDetail.getSpuExtId())); -// if(ttCouponChannelPoi != null && !spuDetail.getStatus().equals(ttCouponChannelPoi.getStatus())){ -// TtCouponChannelPoi ccPoi = new TtCouponChannelPoi(); -// ccPoi.setId(ttCouponChannelPoi.getId()); -// ccPoi.setStatus(spuDetail.getStatus()); -// ccPoi.setStatusDesc(spuDetail.getStatusDesc()); -// ccPoi.setUpdateDate(now); -// ttCouponChannelPoiMapper.updateById(ccPoi); -// }else if(ttCouponChannelPoi == null){ -// ttCouponChannelPoi = new TtCouponChannelPoi(); -// ttCouponChannelPoi.setId(Long.parseLong(spuDetail.getSpuExtId())); -// ttCouponChannelPoi.updateTenantInfo(tenantInfo); -// ttCouponChannelPoi.setSpuId(spuDetail.getSpuId()); -// ttCouponChannelPoi.setStatus(spuDetail.getStatus()); -// ttCouponChannelPoi.setStatusDesc(spuDetail.getStatusDesc()); -// ttCouponChannelPoi.setCreateDate(now); -// ttCouponChannelPoi.setUpdateDate(now); -// ttCouponChannelPoiMapper.insert(ttCouponChannelPoi); -// } -// } -// List spuDraftList = spuGetResult.getSpuDraft(); -// if(spuDraftList != null && spuDraftList.size() > 0){ -// TtSpuSync spuDraft = spuDraftList.get(0); -// if(spuDraft != null && StringUtils.isNotBlank(spuDraft.getSpuId()) && StringUtils.isNotBlank(spuDraft.getSpuExtId()) -// && spuDraft.getStatus() != null){ -// TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectById(tenantInfo.getTenantId(),Long.parseLong(spuDraft.getSpuExtId())); -// if(ttCouponChannelPoi != null && !spuDraft.getStatus().equals(ttCouponChannelPoi.getStatus())){ -// TtCouponChannelPoi ccPoi = new TtCouponChannelPoi(); -// ccPoi.setId(ttCouponChannelPoi.getId()); -// ccPoi.setLastStatus(spuDraft.getStatus()); -// ccPoi.setLastStatusDesc(spuDraft.getStatusDesc()); -// ccPoi.setUpdateDate(now); -// ttCouponChannelPoiMapper.updateById(ccPoi); -// }else if(ttCouponChannelPoi == null){ -// ttCouponChannelPoi = new TtCouponChannelPoi(); -// ttCouponChannelPoi.setId(Long.parseLong(spuDraft.getSpuExtId())); -// ttCouponChannelPoi.updateTenantInfo(tenantInfo); -// ttCouponChannelPoi.setSpuId(spuDraft.getSpuId()); -// ttCouponChannelPoi.setStatus(EnumSpuSyncStatus.sync_auditing.getCode()); -// ttCouponChannelPoi.setLastStatus(spuDraft.getStatus()); -// ttCouponChannelPoi.setLastStatusDesc(spuDraft.getStatusDesc()); -// ttCouponChannelPoi.setCreateDate(now); -// ttCouponChannelPoi.setUpdateDate(now); -// ttCouponChannelPoiMapper.insert(ttCouponChannelPoi); -// } -// } -// } -// } -// -// private Map handSpuSync(TtSpuSync spuSync){ -// Map map = new HashMap<>(); -// map.put("id",spuSync.getSpuExtId()); -// map.put("spu_id",spuSync.getSpuId()); -// map.put("image_list",spuSync.getImageList()); -// map.put("name",spuSync.getName()); -// if(spuSync.getAttribute() != null){ -// JsonObject attribute = spuSync.getAttribute(); -// JsonArray pay_item_groups = attribute.getAsJsonArray("pay_item_groups"); -// map.put("pay_item_groups",pay_item_groups.toString()); -// JsonArray notification = attribute.getAsJsonArray("notification"); -// map.put("notification",notification.toString()); -// map.put("order_limit", GsonHelper.getString(attribute, "order_limit")); -// //售卖有效期 -// map.put("groupon_valid_start", GsonHelper.getString(attribute, "groupon_valid_start")); -// map.put("groupon_valid_end", GsonHelper.getString(attribute, "groupon_valid_end")); -// //卷有效期 -// map.put("order_valid_start", GsonHelper.getString(attribute, "order_valid_start")); -// map.put("order_valid_end", GsonHelper.getString(attribute, "order_valid_end")); -// -// } -// -// map.put("price",spuSync.getPrice()); -// map.put("origin_price",spuSync.getOriginPrice()); -// map.put("stock",spuSync.getStock()); -// map.put("status",spuSync.getStatus()); -// map.put("status_desc",spuSync.getStatusDesc()); -// return map; -// } - -// @Override -// public ResultData spuStatusSync(TenantEntity tenantInfo, Long couponChannelId) { -// WxCouponChannel couponChannel = wxCouponChannelMapper.selectById(couponChannelId, tenantInfo.getTenantId()); -// if(couponChannel == null){ -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到卷数据"); -// } -// if(StringUtils.isBlank(couponChannel.getTtSpuId())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"该券未同步poi"); -// } -// TtSpuStatusSync statusSync = new TtSpuStatusSync(); -// List ids = new ArrayList<>(); -// ids.add(couponChannel.getId().toString()); -// statusSync.setSpuExtIdList(ids); -// if(EnumCouponChannelStatus.STATUS_THROW_IN.getCode().equals(couponChannel.getStatus())){ -// statusSync.setStatus(1); -// }else{ -// statusSync.setStatus(2); -// } -// try { -// TtSpuStatusSync statusSyncResult = getTtWebService(tenantInfo).getProductService().spuStatusSync(statusSync); -// if(statusSyncResult.getSpuExtIdList() != null && statusSyncResult.getSpuExtIdList().containsAll(ids)){ -// return new ResultData(); -// } -// } catch (WxErrorException e) { -// logger.error("couponChannelId:"+couponChannelId +" 多门店SPU状态同步error "+e.getMessage()); -// throw new MallinkException(ErrorCode.MSG_METHOD_REQUEST_ERROR.getCode(),e.getMessage()); -//// return new ResultData(ErrorCode.MSG_METHOD_REQUEST_ERROR.getCode(),e.getMessage()); -// } -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"同步失败"); -//// return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"同步失败"); -// } - -// @Override -// public ResultData spuStockSync(TenantEntity tenantInfo, Long couponChannelId) { -// WxCouponChannel couponChannel = wxCouponChannelMapper.selectById(couponChannelId, tenantInfo.getTenantId()); -// if(couponChannel == null){ -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到卷数据"); -// } -// if(StringUtils.isBlank(couponChannel.getTtSpuId())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"该券未同步poi"); -// } -// WxCoupon coupon = wxCouponMapper.selectById(couponChannel.getCouponId(), tenantInfo.getTenantId()); -// if(coupon == null){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未找到卷数据"); -// } -// TtSpuStockSync stockSync = new TtSpuStockSync(); -// stockSync.setSpuExtId(couponChannel.getId().toString()); -// stockSync.setStock(coupon.getRemainInventory()); -// try { -// boolean syncResult = getTtWebService(tenantInfo).getProductService().spuStockUpdate(stockSync); -// if(syncResult){ -// return new ResultData(); -// } -// } catch (WxErrorException e) { -// logger.error("couponChannelId:"+couponChannelId +" 多门店SPU状态同步error "+e.getMessage()); -// throw new MallinkException(ErrorCode.MSG_METHOD_REQUEST_ERROR.getCode(),e.getMessage()); -//// return new ResultData(ErrorCode.MSG_METHOD_REQUEST_ERROR.getCode(),e.getMessage()); -// } -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"同步失败"); -//// return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"同步失败"); -// } - } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoParkService.java index 82f0a968b..dcc80bc86 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoParkService.java @@ -65,20 +65,7 @@ public class KeTuoParkService extends BaseParkService implements ParkAdapterServ KeTuoUtil ketuo = new KeTuoUtil(); /** - * 先去捷顺注册,调用登陆获取令牌,然后根据令牌调用别的接口 - * http://ap.jieshun.cn:9088/apply/ 注册信息地址 fumao/iformall2020 - * - * 捷顺商户平台:http://merchant.jslife.com.cn/merchant/index.html#/auth/login - * 捷顺门店平台:http://merchant.jslife.com.cn/store/index.html#/auth/login - * 门店商户号 000000008032172000003 密码 ycHqp61Acudxz - * - * - * API对接注意事项: - 1、token有效期两个小时,每两小时内登录一次获取token,调业务接口不需要频繁登录用,建议获取一次token存本地缓存,之后从本地获取,两小时内刷新一次, - 为避免调业务接口时刚好token被刷新,导致token失效(无效的令牌或令牌已过期),可以做下容错,重新登录获取token或用最新token重新调业务接口。 - 2、token是和ip是一对一绑定,新的ip服务器调捷顺的接口会出现ip不合法,需把ip提供捷顺方,添加白名单。多个服务调捷顺接口共用一个ip情况下,只能共用一套登录获取token机制,各自登录会冲突。 - 3、所有接口要带车牌的一律带横杠。格式如:粤-B12345。 - 4、无效的数据签名是指sn加密方式不对。sn加密方式是对p+signkey进行Md5加密,加密后的字符串大写。 + * 科拓 停车场云助手App. 开通电子抵扣券 */ @Override From 704a739cc31d91eb8e8a987ae0d067d800d69e2e Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 11 Jul 2023 16:35:12 +0800 Subject: [PATCH 07/19] fix bug --- .../src/main/java/com/iformall/controller/mem/AsyncTask.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 67d7bd7ec..b80f82680 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -223,7 +223,7 @@ public class AsyncTask { try { successList.parallelStream().forEach(poiBase -> { try { - ttMerchantPoiService.importOneMem(user,importKey, poiBase); + ttMerchantPoiService.importOneMem(user, poiBase); } catch (UnknownSessionException ue) { logger.error("session :"+ue.getMessage()); } @@ -392,7 +392,7 @@ public class AsyncTask { ExportParams exportParams = new ExportParams(); exportParams.setType(ExcelType.XSSF); Workbook workBook = ExcelExportUtil.exportExcel(exportParams, MerchantPoiTNew.class, successList); - exportExcel(request, response, workBook, "POI匹配模版-高德.xlsx"); + exportExcel(request, response, workBook, "POI导入-结果.xlsx"); } catch (Exception e) { logger.error("导入模板失败:"+e.getMessage(),e); From 4bfccb36549d9d8c1f9aded0dda3b7d320d25592 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 11 Jul 2023 16:51:48 +0800 Subject: [PATCH 08/19] fix bug --- .../src/main/java/com/iformall/controller/mem/AsyncTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index b80f82680..92d0051d1 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -355,7 +355,7 @@ public class AsyncTask { String[] headers = new String[]{"门店名称", "门店ID", "城市", "详细地址","管理员手机号","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注","POI导入日志"}; params.setImportFields(headers); IExcelDataHandler handler = new AsyncTask.PoiNewExcelHandler(); - handler.setNeedHandlerFields(new String[]{"门店ID","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度"}); + handler.setNeedHandlerFields(new String[]{"门店ID","富茂系统商户ID","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度"}); params.setNeedVerify(true); ExcelImportResult datalist = null; From 4244b1557df1df656bc1f33ae4f3b1a72ffb9007 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 11 Jul 2023 17:21:39 +0800 Subject: [PATCH 09/19] fix bug --- .../iformall/controller/mem/AsyncTask.java | 45 +++++++++++-------- .../service/TtMerchantPoiService.java | 2 +- .../impl/TtMerchantPoiServiceImpl.java | 15 ++++--- 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 92d0051d1..9acbb41cd 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -272,7 +272,7 @@ public class AsyncTask { //查询所有匹配了poi的 TtMerchantPoi poiQ = new TtMerchantPoi(); poiQ.updateTenantInfo(tenantEntity); - Map poiMerchantIdMap = ttMerchantPoiService.queryPoiMerchantIdMap(poiQ); + Map poiMerchantMap = ttMerchantPoiService.queryPoiMerchantMap(poiQ); //查询所有商户 WxMerchant merchantQ = new WxMerchant(); @@ -282,6 +282,31 @@ public class AsyncTask { try { successList.parallelStream().forEach(poiBase -> { try { + String poiId = poiBase.getPoiId(); + if (StringUtils.isNotBlank(poiId) && null != poiMerchantMap) { + TtMerchantPoi tm = poiMerchantMap.get(poiId); + if (null != tm) { + if (tm.getId() > 0 ) { + poiBase.setMerchantId(String.valueOf(tm.getId())); + poiBase.setProvince(tm.getProvince()); + poiBase.setCity(tm.getCity()); + poiBase.setAddress(tm.getAddress()); + poiBase.setLongitude(tm.getLongitude()); + poiBase.setLatitude(tm.getLatitude()); + poiBase.setGaodeRemark("已匹配过,无需查询高德匹配"); + }else { + poiBase.setMerchantId(null); + poiBase.setMerchantName("多个商户已匹配该POI,请手动输入商户信息"); + } + } + if (null != merchantMap && null != tm && tm.getId() > 0) { + WxMerchant m = merchantMap.get(tm.getId()); + if (null != m) { + poiBase.setMerchantName(m.getName()); + } + } + } + if (StringUtils.isNotBlank(poiBase.getProvince()) && StringUtils.isNotBlank(poiBase.getCity()) && StringUtils.isNotBlank(poiBase.getAddress()) && null != poiBase.getLongitude() && null != poiBase.getLatitude()) { //do nothing @@ -302,23 +327,7 @@ public class AsyncTask { poiBase.setGaodeRemark("未匹配到信息"); } } - String poiId = poiBase.getPoiId(); - if (StringUtils.isNotBlank(poiId) && null != poiMerchantIdMap) { - Long merchantId = poiMerchantIdMap.get(poiId); - if (null != merchantId) { - if (merchantId > 0 ) { - poiBase.setMerchantId(String.valueOf(merchantId)); - }else { - poiBase.setMerchantId("多个商户已匹配该POI,请手动输入"); - } - } - if (null != merchantMap && null != merchantId && merchantId > 0) { - WxMerchant m = merchantMap.get(merchantId); - if (null != m) { - poiBase.setMerchantName(m.getName()); - } - } - } + } catch (UnknownSessionException ue) { logger.error("session :"+ue.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java b/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java index fb75ada92..b623e4b65 100644 --- a/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java +++ b/mallinkService/src/main/java/com/iformall/service/TtMerchantPoiService.java @@ -72,5 +72,5 @@ public interface TtMerchantPoiService { GaoDePoiInfo queryGaoDePoiInfo(String gaodeKey,String address); - Map queryPoiMerchantIdMap(TtMerchantPoi merchantPoiQ); + Map queryPoiMerchantMap(TtMerchantPoi merchantPoiQ); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java index 47581d95b..ee08f2b78 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java @@ -729,18 +729,21 @@ public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { } @Override - public Map queryPoiMerchantIdMap(TtMerchantPoi merchantPoiQ) { + public Map queryPoiMerchantMap(TtMerchantPoi merchantPoiQ) { List poiList = ttMerchantPoiMapper.findList(merchantPoiQ); if (null != poiList) { - Map poiMerchantIdMap = new HashMap(); + Map poiMerchantIdMap = new HashMap(); for (int i = 0 ; i < poiList.size(); i++) { TtMerchantPoi poi = poiList.get(i); if (StringUtils.isNotBlank(poi.getPoiId())) { - Long curMId = poiMerchantIdMap.get(poi.getPoiId()); - if (null == curMId) { - poiMerchantIdMap.put(poi.getPoiId(), poi.getId()); + TtMerchantPoi curm = poiMerchantIdMap.get(poi.getPoiId()); + if (null == curm) { + poiMerchantIdMap.put(poi.getPoiId(), poi); }else { - poiMerchantIdMap.put(poi.getPoiId(), -1L); + TtMerchantPoi _poiT = new TtMerchantPoi(); + _poiT.setId(-1L); + _poiT.setMerchantName("多个商户已匹配该POI"); + poiMerchantIdMap.put(poi.getPoiId(), _poiT); } } } From 4dff93c14ae3cd89693e207cd84cf0baec32aa60 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 11 Jul 2023 18:14:27 +0800 Subject: [PATCH 10/19] fix bug --- .../basic/TtMerchantPoiController.java | 227 ++++++------------ .../iformall/controller/mem/AsyncTask.java | 225 ++++++++--------- .../java/com/iformall/utils/Constant.java | 2 + 3 files changed, 173 insertions(+), 281 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java index dda785525..d8ed6a91c 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java @@ -1,5 +1,6 @@ package com.iformall.controller.basic; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.github.pagehelper.PageInfo; import com.iformall.annotation.SystemControllerLog; import com.iformall.annotation.TenantIgnore; @@ -156,82 +157,6 @@ public class TtMerchantPoiController extends DouyinBaseController { return ttMerchantPoiService.supplierQuery(getTenantInfo(),id); } -// @ApiOperation("获取商品可用的POI") -// @GetMapping("/findPoi") -// @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) -// @SystemControllerLog(description = "查询") -// public ResultData findPoi(Long couponChannelId) { -// logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::findPoi"); -// if(couponChannelId == null){ -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); -// } -// return ttMerchantPoiService.findPoi(getTenantInfo(),couponChannelId); -// } - -// @ApiOperation("商品同步") -// @PostMapping("spuSync") -// @SystemControllerLog(description = "商品同步") -// public ResultData spuSync(@RequestBody Map param) { -// logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::spuSync"); -// String couponChannelIdStr = param.get("couponChannelId"); -// Long couponChannelId = null; -// try{ -// couponChannelId = Long.parseLong(couponChannelIdStr); -// }catch(Exception e){ -// return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR); -// } -// if(couponChannelId == null){ -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); -// } -//// String merchantIdStr = param.get("merchantIds"); -//// List merchantIds = new ArrayList<>(); -//// try{ -//// List strings = Arrays.asList(merchantIdStr.split(",")); -//// merchantIds = strings.stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList()); -//// }catch(Exception e){ -//// return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR); -//// } -//// if(merchantIds == null || merchantIds.size() == 0){ -//// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); -//// } -// return ttMerchantPoiService.spuSync(getTenantInfo(),couponChannelId,null); -// } - -// @ApiOperation("商品同步查询") -// @GetMapping("spuGet") -// @SystemControllerLog(description = "商品同步查询") -// public ResultData spuGet(Long couponChannelId) { -// logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::spuGet"); -// if(couponChannelId == null){ -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); -// } -// return ttMerchantPoiService.spuGet(getTenantInfo(),couponChannelId); -// } -// -// @ApiOperation("商品状态同步") -// @PostMapping("spuStatusSync") -// @SystemControllerLog(description = "商品状态同步") -// public ResultData spuStatusSync(@RequestBody Map param) { -// logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::spuStatusSync"); -// Long couponChannelId = param.get("couponChannelId"); -// if(couponChannelId == null){ -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); -// } -// return ttMerchantPoiService.spuStatusSync(getTenantInfo(),couponChannelId); -// } -// -// @ApiOperation("商品库存同步") -// @PostMapping("spuStockSync") -// @SystemControllerLog(description = "商品库存同步") -// public ResultData spuStockSync(@RequestBody Map param) { -// logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::spuStockSync"); -// Long couponChannelId = param.get("couponChannelId"); -// if(couponChannelId == null){ -// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); -// } -// return ttMerchantPoiService.spuStockSync(getTenantInfo(),couponChannelId); -// } - @TenantIgnore @RequestMapping("/exportTemplate") public void exportTemplate(HttpServletRequest request, HttpServletResponse response) { @@ -251,7 +176,6 @@ public class TtMerchantPoiController extends DouyinBaseController { @TenantIgnore @PostMapping(value = "/addLocationInfo", consumes = "multipart/*") - //@SystemControllerLog(description = "poi-来客模版补齐地理位置信息") public void addLocationInfo(@RequestParam("poiFile") MultipartFile mFile,HttpServletRequest request, HttpServletResponse response) { try { boolean isSaas = this.isGoodLifeSaas(); @@ -269,17 +193,39 @@ public class TtMerchantPoiController extends DouyinBaseController { private void addLocationInfo(TenantEntity tenantEntity,MultipartFile mFile,boolean isNew,String gaodeKey, HttpServletRequest request, HttpServletResponse response) throws Exception{ + File lFile = handlerImportFile(mFile,null,"poiAddLocation"); + if (isNew) { + asyncTask.exportExcelPoiDataAddLocationForNew(tenantEntity,gaodeKey,lFile,request,response); + }else { + } + } + + private File handlerImportFile(MultipartFile mFile,String importKey,String fileNamePre) { if (mFile.isEmpty()) { throw new MallinkException(Result.ERROR, "上传文件不能为空"); } - //得到当前用户ID - + + boolean isSetCacheLock = true; + if (StringUtils.isBlank(importKey)) { + isSetCacheLock = false; + } + + //查询当前用户得到的值是否为空,为空继续,不为空,返回模板正在导入 + if (isSetCacheLock) { + Boolean allCount = stringRedisTemplate.opsForHash().hasKey(importKey, "allCount"); + if (allCount) { + throw new MallinkException(Result.SUCCESS, "模板正在导入"); + } + + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", 0 + ""); + } + String fpath = fmUploadDir; File targetFile = new File(fpath); if (!targetFile.exists()) { targetFile.mkdirs(); } - String fileName = "poiAddLocation" + Math.round(Math.random() * 100000000000L); + String fileName = fileNamePre + Math.round(Math.random() * 100000000000L); int dot = mFile.getOriginalFilename().lastIndexOf('.'); fileName = fileName + mFile.getOriginalFilename().substring(dot, mFile.getOriginalFilename().length()); @@ -297,32 +243,40 @@ public class TtMerchantPoiController extends DouyinBaseController { } fos.close(); fs.close(); + return lFile; } catch (Exception e) { - logger.error("poiAddLocation create tempFile error.",e); - throw new MallinkException(Result.ERROR,e.getMessage()); + if (isSetCacheLock) { + stringRedisTemplate.expire(importKey,3,TimeUnit.SECONDS); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); + } + logger.error("poi import error.",e); + throw new MallinkException(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { - logger.error("poiAddLocation create tempFile error.",e); - throw new MallinkException(Result.ERROR,e.getMessage()); + if (isSetCacheLock) { + stringRedisTemplate.expire(importKey,3,TimeUnit.SECONDS); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); + } + logger.error("poi import error.",e); + throw new MallinkException(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); } } if (fs != null) { try { fs.close(); } catch (IOException e) { - logger.error("poiAddLocation create tempFile error.",e); - throw new MallinkException(Result.ERROR,e.getMessage()); + if (isSetCacheLock) { + stringRedisTemplate.expire(importKey,3,TimeUnit.SECONDS); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); + } + logger.error("poi import error.",e); + throw new MallinkException(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); } } } - if (isNew) { - asyncTask.exportExcelPoiDataAddLocationForNew(tenantEntity,gaodeKey,lFile,request,response); - }else { - } - } @@ -345,72 +299,41 @@ public class TtMerchantPoiController extends DouyinBaseController { private void processImport(MultipartFile mFile,boolean isNew,HttpServletRequest request, HttpServletResponse response) throws Exception { logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::importPoi"); - if (mFile.isEmpty()) { - throw new MallinkException(Result.ERROR, "上传文件不能为空"); - } - //得到当前用户ID + //得到当前用户ID final MallUserInfo user = getUser(); String userId = "" + user.getId(); String importKey = Constant.importPoiPrev + userId; - - //查询当前用户得到的值是否为空,为空继续,不为空,返回模板正在导入 - Boolean allCount = stringRedisTemplate.opsForHash().hasKey(importKey, "allCount"); - if (allCount) { - throw new MallinkException(Result.SUCCESS, "模板正在导入"); - } - - stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", 0 + ""); - - String fpath = fmUploadDir; - File targetFile = new File(fpath); - if (!targetFile.exists()) { - targetFile.mkdirs(); + File lFile = handlerImportFile(mFile,importKey,"poi"); + if (isNew) { + asyncTask.importExcelPoiDataForNew(lFile, user, importKey,request,response); + }else { + asyncTask.importExcelPoiData(lFile, user, importKey,request,response); } - String fileName = "poi" + Math.round(Math.random() * 100000000000L); - int dot = mFile.getOriginalFilename().lastIndexOf('.'); - fileName = fileName + mFile.getOriginalFilename().substring(dot, mFile.getOriginalFilename().length()); - - File lFile = new File(fpath + File.separator + fileName); - FileOutputStream fos = null; - BufferedInputStream fs = null; - try { - fos = new FileOutputStream(lFile); - fs = (BufferedInputStream) mFile.getInputStream(); - byte[] buffer = new byte[1024]; - int len = 0; - while ((len = fs.read(buffer)) != -1) { - fos.write(buffer, 0, len); - } - fos.close(); - fs.close(); - } catch (Exception e) { - stringRedisTemplate.expire(importKey,3,TimeUnit.SECONDS); - stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); - logger.error("poi import error.",e); - throw new MallinkException(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); - } finally { - if (fos != null) { - try { - fos.close(); - } catch (IOException e) { - stringRedisTemplate.expire(importKey,3,TimeUnit.SECONDS); - stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); - logger.error("poi import error.",e); - throw new MallinkException(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); - } - } - if (fs != null) { - try { - fs.close(); - } catch (IOException e) { - stringRedisTemplate.expire(importKey,3,TimeUnit.SECONDS); - stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); - logger.error("poi import error.",e); - throw new MallinkException(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); - } - } - } + } + + @TenantIgnore + @PostMapping(value = "/importMerchantInitByPoi", consumes = "multipart/*") + @SystemControllerLog(description = "poi-初始化商户商户") + public void importMerchantInitByPoi(@RequestParam("file") MultipartFile mFile,HttpServletRequest request, HttpServletResponse response) { + try { + boolean isSaas = this.isGoodLifeSaas(); + if (!isSaas) { + throw new MallinkException(Result.ERROR,"当前版本不支持"); + }else { + importMerchantInit(mFile,true,request,response); + } + } catch (Exception e) { + logger.error("importMerchantInitByPoi error.",e); + throw new MallinkException(Result.ERROR,e.getMessage()); + } + } + + private void importMerchantInit(MultipartFile mFile,boolean isNew,HttpServletRequest request, HttpServletResponse response) throws Exception { + final MallUserInfo user = getUser(); + String userId = "" + user.getId(); + String importKey = Constant.importPoiMerchantPrev + userId; + File lFile = handlerImportFile(mFile,importKey,"poiMerchant"); if (isNew) { asyncTask.importExcelPoiDataForNew(lFile, user, importKey,request,response); }else { diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 9acbb41cd..13f829077 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -188,22 +188,21 @@ public class AsyncTask { } @Async - public void importExcelPoiData(File file, MallUserInfo user, String importKey,HttpServletRequest request, HttpServletResponse response) { + public void importCardPriceData(File file, MallUserInfo user, String importKey) { ImportParams params = new ImportParams(); // 需要验证 - params.setImportFields(new String[]{"服务商POI_ID", "POI名称", "省份", "城市", "地址", "经度", "纬度", "高德ID(非必填)", - "已匹配POI_ID", "已匹配POI名称", "已匹配POI省份", "已匹配POI城市", "已匹配POI地址", "未匹配原因", "其他信息","POI导入结果"}); - IExcelDataHandler handler = new AsyncTask.PoiExcelHandler(); - handler.setNeedHandlerFields(new String[]{"服务商POI_ID","已匹配POI_ID"}); + params.setImportFields(new String[]{"*卡ID", "*面额(元)"}); + IExcelDataHandler handler = new AsyncTask.CardPriceExcelHandler(); + handler.setNeedHandlerFields(new String[]{"*卡ID","*面额(元)"}); params.setNeedVerify(true); - ExcelImportResult datalist = null; + ExcelImportResult datalist = null; try { - datalist = ExcelImportUtil.importExcelMore(file, MerchantPoiT.class, params); + datalist = ExcelImportUtil.importExcelMore(file, WxCardPriceTemplate.class, params); } catch (Exception e) { - logger.error(e.getMessage(),e); - stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); + set_redis_value(importKey, "1", "0", "0", "1", true); + logger.error(e.getMessage()); // 删除缓存文件 file.delete(); return; @@ -212,58 +211,110 @@ public class AsyncTask { file.delete(); if(datalist == null) { - logger.error("导入模板失败: 模板数据解析失败"); - stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); + logger.error("导入模板失败: 模板数据解析失败"); + set_redis_value(importKey, "1", "0", "0", "1", true); return; } - List successList = datalist.getList(); - + List successList = datalist.getList(); + List failList = datalist.getFailList(); + + logger.info("验证通过的数量: " + successList.size()); + logger.info("验证未通过的数量: " + failList.size()); + + int total = successList.size() + failList.size(); + int all_success = successList.size(); + int all_fail = failList.size(); + + //添加到redis里 + set_redis_value(importKey, "" + total, "" + all_success, "0", "" + all_fail, total == all_fail); + if(successList.size() > 0) { try { successList.parallelStream().forEach(poiBase -> { try { - ttMerchantPoiService.importOneMem(user, poiBase); + wxCouponPasswordService.importPrice(user,importKey, poiBase); } catch (UnknownSessionException ue) { logger.error("session :"+ue.getMessage()); } }); - stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); - ExportParams exportParams = new ExportParams(); - exportParams.setType(ExcelType.XSSF); - Workbook workBook = ExcelExportUtil.exportExcel(exportParams, MerchantPoiT.class, successList); - exportExcel(request, response, workBook, "POI导入-结果.xlsx"); } catch (Exception e) { - logger.error("导入模板失败:"+e.getMessage(),e); - stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); + set_redis_value(importKey, "1", "0", "0", "1", true); + e.printStackTrace(); + logger.error("导入模板失败:"+e.getMessage()); } } } - public void exportExcelPoiDataAddLocationForNew(TenantEntity tenantEntity,String gaodeKey,File file,HttpServletRequest request, HttpServletResponse response) throws Exception { - ImportParams params = new ImportParams(); + private ExcelImportResult handleImportFile(String importKey,File file,Class dataClazz,String[] importFields,String[] needFields,IExcelDataHandler handler) { + ImportParams params = new ImportParams(); // 需要验证 - String[] headers = new String[]{"门店名称", "门店ID", "城市", "详细地址","管理员手机号","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注","POI导入日志"}; - params.setImportFields(headers); - IExcelDataHandler handler = new AsyncTask.PoiNewExcelHandler(); - handler.setNeedHandlerFields(new String[]{"门店名称", "门店ID", "城市", "详细地址"}); + params.setImportFields(importFields); + handler.setNeedHandlerFields(needFields); params.setNeedVerify(true); - - ExcelImportResult datalist = null; - + ExcelImportResult datalist = null; try { - datalist = ExcelImportUtil.importExcelMore(file, MerchantPoiTNew.class, params); + datalist = ExcelImportUtil.importExcelMore(file, dataClazz, params); } catch (Exception e) { - logger.error("exportExcelPoiDataAddLocationForNew import error.",e); + logger.error(e.getMessage(),e); + if (StringUtils.isNotBlank(importKey)) { + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); + } // 删除缓存文件 file.delete(); - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); + return null; } // 删除缓存文件 file.delete(); if(datalist == null) { - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"解析模版失败,请检查模版格式"); + logger.error("导入模板失败: 模板数据解析失败"); + if (StringUtils.isNotBlank(importKey)) { + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); + } + return null; + } + return datalist; + } + + @Async + public void importExcelPoiData(File file, MallUserInfo user, String importKey,HttpServletRequest request, HttpServletResponse response) { + String[] importFields = new String[]{"服务商POI_ID", "POI名称", "省份", "城市", "地址", "经度", "纬度", "高德ID(非必填)", + "已匹配POI_ID", "已匹配POI名称", "已匹配POI省份", "已匹配POI城市", "已匹配POI地址", "未匹配原因", "其他信息","POI导入结果"}; + String[] needFields = new String[]{"服务商POI_ID","已匹配POI_ID"}; + ExcelImportResult datalist = handleImportFile(importKey,file,MerchantPoiT.class,importFields,needFields,new AsyncTask.PoiExcelHandler()); + if (null == datalist) { + return; + } + List successList = datalist.getList(); + + if(successList.size() > 0) { + try { + successList.parallelStream().forEach(poiBase -> { + try { + ttMerchantPoiService.importOneMem(user, poiBase); + } catch (UnknownSessionException ue) { + logger.error("session :"+ue.getMessage()); + } + }); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); + exportExcel(request, response, successList,MerchantPoiT.class, "POI导入-结果.xlsx"); + } catch (Exception e) { + logger.error("导入模板失败:"+e.getMessage(),e); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); + } + } + } + + private static final String[] poiImportFields = new String[]{"门店名称", "门店ID", "城市", "详细地址","管理员手机号","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注","POI导入日志"}; + + public void exportExcelPoiDataAddLocationForNew(TenantEntity tenantEntity,String gaodeKey,File file,HttpServletRequest request, HttpServletResponse response) throws Exception { + ImportParams params = new ImportParams(); + // 需要验证 + String[] needFields = new String[]{"门店名称", "门店ID", "城市", "详细地址"}; + ExcelImportResult datalist = handleImportFile(null,file,MerchantPoiTNew.class,poiImportFields,needFields,new AsyncTask.PoiNewExcelHandler()); + if (null == datalist) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"解析模版失败,请检查模版格式"); } List successList = datalist.getList(); @@ -327,24 +378,22 @@ public class AsyncTask { poiBase.setGaodeRemark("未匹配到信息"); } } - - } catch (UnknownSessionException ue) { logger.error("session :"+ue.getMessage()); poiBase.setGaodeRemark("查询高德API失败"); } }); - ExportParams exportParams = new ExportParams(); - exportParams.setType(ExcelType.XSSF); - Workbook workBook = ExcelExportUtil.exportExcel(exportParams, MerchantPoiTNew.class, successList); - exportExcel(request, response, workBook, "POI匹配模版-高德.xlsx"); + exportExcel(request, response, successList,MerchantPoiTNew.class, "POI匹配模版-高德.xlsx"); } catch (Exception e) { logger.error("更新地理信息失败:"+e.getMessage(),e); } } } - private static void exportExcel(HttpServletRequest request, HttpServletResponse response, Workbook wb, String fileName) throws Exception { + private static void exportExcel(HttpServletRequest request, HttpServletResponse response,List successList, Class dataClass, String fileName) throws Exception { + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workBook = ExcelExportUtil.exportExcel(exportParams, dataClass, successList); response.setContentType("application/octet-stream;charset=UTF-8"); //response.setHeader("Content-Type", "application/vnd.ms-excel");//xls response.setHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");//xlsx @@ -352,39 +401,18 @@ public class AsyncTask { response.addHeader("Pargam", "no-cache"); response.addHeader("Cache-Control", "no-cache"); OutputStream out = response.getOutputStream(); - wb.write(out); + workBook.write(out); out.flush(); out.close(); } @Async public void importExcelPoiDataForNew(File file, MallUserInfo user, String importKey,HttpServletRequest request, HttpServletResponse response) { - ImportParams params = new ImportParams(); // 需要验证 - String[] headers = new String[]{"门店名称", "门店ID", "城市", "详细地址","管理员手机号","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注","POI导入日志"}; - params.setImportFields(headers); - IExcelDataHandler handler = new AsyncTask.PoiNewExcelHandler(); - handler.setNeedHandlerFields(new String[]{"门店ID","富茂系统商户ID","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度"}); - params.setNeedVerify(true); - - ExcelImportResult datalist = null; - - try { - datalist = ExcelImportUtil.importExcelMore(file, MerchantPoiTNew.class, params); - } catch (Exception e) { - logger.error("importExcelPoiDataForNew error.",e); - stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); - // 删除缓存文件 - file.delete(); - return; - } - // 删除缓存文件 - file.delete(); - - if(datalist == null) { - logger.error("导入模板失败: 模板数据解析失败"); - stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); - return; + String[] needFields = new String[]{"门店ID","富茂系统商户ID","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度"}; + ExcelImportResult datalist = handleImportFile(null,file,MerchantPoiTNew.class,poiImportFields,needFields,new AsyncTask.PoiNewExcelHandler()); + if (null == datalist) { + return ; } List successList = datalist.getList(); @@ -398,11 +426,7 @@ public class AsyncTask { } }); stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); - ExportParams exportParams = new ExportParams(); - exportParams.setType(ExcelType.XSSF); - Workbook workBook = ExcelExportUtil.exportExcel(exportParams, MerchantPoiTNew.class, successList); - exportExcel(request, response, workBook, "POI导入-结果.xlsx"); - + exportExcel(request, response, successList,MerchantPoiTNew.class, "POI导入-结果.xlsx"); } catch (Exception e) { logger.error("导入模板失败:"+e.getMessage(),e); stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); @@ -410,62 +434,5 @@ public class AsyncTask { } } - @Async - public void importCardPriceData(File file, MallUserInfo user, String importKey) { - ImportParams params = new ImportParams(); - // 需要验证 - params.setImportFields(new String[]{"*卡ID", "*面额(元)"}); - IExcelDataHandler handler = new AsyncTask.CardPriceExcelHandler(); - handler.setNeedHandlerFields(new String[]{"*卡ID","*面额(元)"}); - params.setNeedVerify(true); - ExcelImportResult datalist = null; - - try { - datalist = ExcelImportUtil.importExcelMore(file, WxCardPriceTemplate.class, params); - } catch (Exception e) { - set_redis_value(importKey, "1", "0", "0", "1", true); - logger.error(e.getMessage()); - // 删除缓存文件 - file.delete(); - return; - } - // 删除缓存文件 - file.delete(); - - if(datalist == null) { - logger.error("导入模板失败: 模板数据解析失败"); - set_redis_value(importKey, "1", "0", "0", "1", true); - return; - } - - List successList = datalist.getList(); - List failList = datalist.getFailList(); - - logger.info("验证通过的数量: " + successList.size()); - logger.info("验证未通过的数量: " + failList.size()); - - int total = successList.size() + failList.size(); - int all_success = successList.size(); - int all_fail = failList.size(); - - //添加到redis里 - set_redis_value(importKey, "" + total, "" + all_success, "0", "" + all_fail, total == all_fail); - - if(successList.size() > 0) { - try { - successList.parallelStream().forEach(poiBase -> { - try { - wxCouponPasswordService.importPrice(user,importKey, poiBase); - } catch (UnknownSessionException ue) { - logger.error("session :"+ue.getMessage()); - } - }); - } catch (Exception e) { - set_redis_value(importKey, "1", "0", "0", "1", true); - e.printStackTrace(); - logger.error("导入模板失败:"+e.getMessage()); - } - } - } } diff --git a/mallinkService/src/main/java/com/iformall/utils/Constant.java b/mallinkService/src/main/java/com/iformall/utils/Constant.java index d39ca9b69..3fa9573d3 100644 --- a/mallinkService/src/main/java/com/iformall/utils/Constant.java +++ b/mallinkService/src/main/java/com/iformall/utils/Constant.java @@ -94,6 +94,8 @@ public class Constant { // 导入POI public static final String importPoiPrev = "importpoi:"; + + public static final String importPoiMerchantPrev = "importpoimerchant:"; //商品门店 public static final String coupon_merchants_key = "coupon:merchants:"; From 52340015f04939e6bdd764e08e0d3b41289aa56d Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 11 Jul 2023 18:18:58 +0800 Subject: [PATCH 11/19] fix --- .../basic/TtMerchantPoiController.java | 61 ++++++------------- .../iformall/controller/mem/AsyncTask.java | 28 +++++++++ 2 files changed, 45 insertions(+), 44 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java index d8ed6a91c..bdc10994b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java @@ -183,7 +183,8 @@ public class TtMerchantPoiController extends DouyinBaseController { //return addLocationInfo(mFile,false); throw new MallinkException(Result.ERROR,"当前版本无需补齐地理位置信息"); }else { - addLocationInfo(this.getTenantInfo(),mFile,true,"1bdc087fc6f72820dc5c848a033de7f9",request,response); + File lFile = handlerImportFile(mFile,null,"poiAddLocation"); + asyncTask.exportExcelPoiDataAddLocationForNew(this.getTenantInfo(),"1bdc087fc6f72820dc5c848a033de7f9",lFile,request,response); } } catch (Exception e) { logger.error("addLocationInfo error.",e); @@ -191,15 +192,6 @@ public class TtMerchantPoiController extends DouyinBaseController { } } - private void addLocationInfo(TenantEntity tenantEntity,MultipartFile mFile,boolean isNew,String gaodeKey, - HttpServletRequest request, HttpServletResponse response) throws Exception{ - File lFile = handlerImportFile(mFile,null,"poiAddLocation"); - if (isNew) { - asyncTask.exportExcelPoiDataAddLocationForNew(tenantEntity,gaodeKey,lFile,request,response); - }else { - } - } - private File handlerImportFile(MultipartFile mFile,String importKey,String fileNamePre) { if (mFile.isEmpty()) { throw new MallinkException(Result.ERROR, "上传文件不能为空"); @@ -286,32 +278,22 @@ public class TtMerchantPoiController extends DouyinBaseController { public void importPoi(@RequestParam("file") MultipartFile mFile,HttpServletRequest request, HttpServletResponse response) { try { boolean isSaas = this.isGoodLifeSaas(); - if (!isSaas) { - processImport(mFile,false,request,response); - }else { - processImport(mFile,true,request,response); - } + //得到当前用户ID + final MallUserInfo user = getUser(); + String userId = "" + user.getId(); + String importKey = Constant.importPoiPrev + userId; + File lFile = handlerImportFile(mFile,importKey,"poi"); + if (isSaas) { + asyncTask.importExcelPoiDataForNew(lFile, user, importKey,request,response); + }else { + asyncTask.importExcelPoiData(lFile, user, importKey,request,response); + } } catch (Exception e) { logger.error("allTreeList error.",e); throw new MallinkException(Result.ERROR,e.getMessage()); } } - private void processImport(MultipartFile mFile,boolean isNew,HttpServletRequest request, HttpServletResponse response) throws Exception { - logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::importPoi"); - //得到当前用户ID - final MallUserInfo user = getUser(); - String userId = "" + user.getId(); - String importKey = Constant.importPoiPrev + userId; - File lFile = handlerImportFile(mFile,importKey,"poi"); - if (isNew) { - asyncTask.importExcelPoiDataForNew(lFile, user, importKey,request,response); - }else { - asyncTask.importExcelPoiData(lFile, user, importKey,request,response); - } - - } - @TenantIgnore @PostMapping(value = "/importMerchantInitByPoi", consumes = "multipart/*") @SystemControllerLog(description = "poi-初始化商户商户") @@ -321,25 +303,16 @@ public class TtMerchantPoiController extends DouyinBaseController { if (!isSaas) { throw new MallinkException(Result.ERROR,"当前版本不支持"); }else { - importMerchantInit(mFile,true,request,response); + final MallUserInfo user = getUser(); + String userId = "" + user.getId(); + String importKey = Constant.importPoiMerchantPrev + userId; + File lFile = handlerImportFile(mFile,importKey,"poiMerchantInit"); + asyncTask.importMerchantInit(lFile, user, importKey,request,response); } } catch (Exception e) { logger.error("importMerchantInitByPoi error.",e); throw new MallinkException(Result.ERROR,e.getMessage()); } } - - private void importMerchantInit(MultipartFile mFile,boolean isNew,HttpServletRequest request, HttpServletResponse response) throws Exception { - final MallUserInfo user = getUser(); - String userId = "" + user.getId(); - String importKey = Constant.importPoiMerchantPrev + userId; - File lFile = handlerImportFile(mFile,importKey,"poiMerchant"); - if (isNew) { - asyncTask.importExcelPoiDataForNew(lFile, user, importKey,request,response); - }else { - asyncTask.importExcelPoiData(lFile, user, importKey,request,response); - } - - } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 13f829077..e05fc13bb 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -434,5 +434,33 @@ public class AsyncTask { } } + @Async + public void importMerchantInit(File file, MallUserInfo user, String importKey,HttpServletRequest request, HttpServletResponse response) { + // 需要验证 + String[] needFields = new String[]{"门店ID","富茂系统商户ID","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度"}; + ExcelImportResult datalist = handleImportFile(null,file,MerchantPoiTNew.class,poiImportFields,needFields,new AsyncTask.PoiNewExcelHandler()); + if (null == datalist) { + return ; + } + + List successList = datalist.getList(); + if(successList.size() > 0) { + try { + successList.parallelStream().forEach(poiBase -> { + try { + ttMerchantPoiService.importOnePoiNew(user, poiBase); + } catch (UnknownSessionException ue) { + logger.error("session :"+ue.getMessage(),ue); + } + }); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); + exportExcel(request, response, successList,MerchantPoiTNew.class, "POI导入-结果.xlsx"); + } catch (Exception e) { + logger.error("导入模板失败:"+e.getMessage(),e); + stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); + } + } + } + } From 38c037c2dc84475b9d274fae16a9e16e0d910996 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 11 Jul 2023 18:38:59 +0800 Subject: [PATCH 12/19] fix bug --- .../com/iformall/controller/mem/AsyncTask.java | 16 +++++++++++++--- .../com/iformall/service/WxMerchantService.java | 2 ++ .../service/impl/TtMerchantPoiServiceImpl.java | 10 ++++++---- .../service/impl/WxMerchantServiceImpl.java | 5 +++++ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index e05fc13bb..5f92da0ee 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -437,18 +437,28 @@ public class AsyncTask { @Async public void importMerchantInit(File file, MallUserInfo user, String importKey,HttpServletRequest request, HttpServletResponse response) { // 需要验证 - String[] needFields = new String[]{"门店ID","富茂系统商户ID","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度"}; + String[] needFields = new String[]{"门店名称", "门店ID", "城市", "详细地址"}; ExcelImportResult datalist = handleImportFile(null,file,MerchantPoiTNew.class,poiImportFields,needFields,new AsyncTask.PoiNewExcelHandler()); if (null == datalist) { return ; } - + //查询所有匹配了poi的 + TtMerchantPoi poiQ = new TtMerchantPoi(); + poiQ.updateTenantInfo(user); + Map poiMerchantMap = ttMerchantPoiService.queryPoiMerchantMap(poiQ); + List successList = datalist.getList(); if(successList.size() > 0) { try { successList.parallelStream().forEach(poiBase -> { try { - ttMerchantPoiService.importOnePoiNew(user, poiBase); + if (null != poiMerchantMap) { + TtMerchantPoi tp = poiMerchantMap.get(poiBase.getPoiId()); + if (null != tp && ) { + + } + } + wxMerchantService.initMerchantByPoi(poiBase.getPoiName(), poiBase.getPoiId()); } catch (UnknownSessionException ue) { logger.error("session :"+ue.getMessage(),ue); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java index a9b373160..5e31efb26 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java @@ -219,5 +219,7 @@ public interface WxMerchantService { List relationList(Long regionId); PageInfo subMerchantList(WxMerchant wxMerchant, Integer pageNum, Integer pageSize); + + void initMerchantByPoi(String poiName,String poiId); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java index ee08f2b78..d01fb06dd 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/TtMerchantPoiServiceImpl.java @@ -610,12 +610,14 @@ public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { poiBase.setImportRemark("导入失败.门店ID为空"); return; } + + if (StringUtils.isBlank(poiBase.getMerchantId())) { + poiBase.setImportRemark("导入失败.富茂系统商户ID为空"); + return; + } try { - TtMerchantPoi merchantPoi = null; - if (StringUtils.isNotBlank(poiBase.getMerchantId())) { - merchantPoi = ttMerchantPoiMapper.selectById(Long.parseLong(poiBase.getMerchantId())); - } + TtMerchantPoi merchantPoi = ttMerchantPoiMapper.selectById(Long.parseLong(poiBase.getMerchantId())); Date now = new Date(); if(merchantPoi == null){ merchantPoi = new TtMerchantPoi(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 89a790891..1b522c2d1 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -2132,4 +2132,9 @@ public class WxMerchantServiceImpl implements WxMerchantService { PageInfo pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxMerchantMapper.findList(wxMerchant)); return pageInfo; } + + @Override + public void initMerchantByPoi(String poiName, String poiId) { + + } } From a068c064d8f01300e491cd9bf3a7a45116c18262 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Tue, 11 Jul 2023 18:46:13 +0800 Subject: [PATCH 13/19] fix bug --- .../iformall/controller/basic/TtMerchantPoiController.java | 7 ++++++- .../main/java/com/iformall/controller/mem/AsyncTask.java | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java index bdc10994b..0ba6a03b7 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java @@ -299,6 +299,11 @@ public class TtMerchantPoiController extends DouyinBaseController { @SystemControllerLog(description = "poi-初始化商户商户") public void importMerchantInitByPoi(@RequestParam("file") MultipartFile mFile,HttpServletRequest request, HttpServletResponse response) { try { + String isnew = request.getParameter("isnew"); + boolean isNew = false; + if ("1".equals(isnew)) { + isNew = true; + } boolean isSaas = this.isGoodLifeSaas(); if (!isSaas) { throw new MallinkException(Result.ERROR,"当前版本不支持"); @@ -307,7 +312,7 @@ public class TtMerchantPoiController extends DouyinBaseController { String userId = "" + user.getId(); String importKey = Constant.importPoiMerchantPrev + userId; File lFile = handlerImportFile(mFile,importKey,"poiMerchantInit"); - asyncTask.importMerchantInit(lFile, user, importKey,request,response); + asyncTask.importMerchantInit(isNew,lFile, user, importKey,request,response); } } catch (Exception e) { logger.error("importMerchantInitByPoi error.",e); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 5f92da0ee..38cd402ed 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -435,13 +435,14 @@ public class AsyncTask { } @Async - public void importMerchantInit(File file, MallUserInfo user, String importKey,HttpServletRequest request, HttpServletResponse response) { + public void importMerchantInit(boolean isAllNew,File file, MallUserInfo user, String importKey,HttpServletRequest request, HttpServletResponse response) { // 需要验证 String[] needFields = new String[]{"门店名称", "门店ID", "城市", "详细地址"}; ExcelImportResult datalist = handleImportFile(null,file,MerchantPoiTNew.class,poiImportFields,needFields,new AsyncTask.PoiNewExcelHandler()); if (null == datalist) { return ; } + //如果不是覆盖,则查询商户中 //查询所有匹配了poi的 TtMerchantPoi poiQ = new TtMerchantPoi(); poiQ.updateTenantInfo(user); From 04cf935a279e8de3da211cd7869398215e23525a Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Wed, 12 Jul 2023 11:07:20 +0800 Subject: [PATCH 14/19] fix car bug --- .../service/park/impl/ketuo/KeTuoParkService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoParkService.java index 82f0a968b..58a846fdc 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoParkService.java @@ -1,5 +1,6 @@ package com.iformall.service.park.impl.ketuo; +import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -122,7 +123,8 @@ public class KeTuoParkService extends BaseParkService implements ParkAdapterServ if (null == retObject ) { throw new MallinkException(retObj.getInteger("resCode"), "ketuo getCarStopFee error. no order result"+carNumber); } - Double totalFee = retObject.getDouble("payable"); + Double totalFee = retObject.getDouble("payable");//分 + String _fee = String.valueOf(new BigDecimal(totalFee).divide(new BigDecimal(100)).doubleValue()); String appId = "wx54e676273869baa6"; String parkOrderId = retObject.getString("orderNo"); Integer freeMinute = (Integer)park.getVendorParamsByKey("freeMinute"); @@ -130,7 +132,7 @@ public class KeTuoParkService extends BaseParkService implements ParkAdapterServ String endTime = retObject.getString("payTime");//离场时间,格式为“yyyy-MM-dd HH:mi:ss” String payPath = "pages/index/index?lotId="+Integer.parseInt(park.getParkingId())+"&lpn="+carNumber; return new ParkStopFee(parkOrderId,ketuo.utcToLocal(createTime),ketuo.utcToLocal(endTime), - String.valueOf(totalFee),appId,payPath,null,null,"请支付后"+freeMinute+"分钟内离场"); + _fee,appId,payPath,null,null,"请支付后"+freeMinute+"分钟内离场"); }else { logger.error("ketuoCarStopFee error. paramMap: {} . ketuoResult: {}",JSON.toJSONString(paramMap),ret); String msg = retObj.getString("resMsg"); @@ -167,7 +169,8 @@ public class KeTuoParkService extends BaseParkService implements ParkAdapterServ boolean isReduceMoney = this.isReduceMoney(coupon); Integer reduceValue = this.getReduceValue(coupon); - String executeRet = ketuo.executediscount(park, fee.getOrderId(), planNo, Integer.parseInt(fee.getRemainingFee()),isReduceMoney, reduceValue); + Integer parkFee = new BigDecimal(fee.getRemainingFee()).multiply(new BigDecimal(100)).intValue(); + String executeRet = ketuo.executediscount(park, fee.getOrderId(), planNo, parkFee,isReduceMoney, reduceValue); logger.info("ketuo executediscount result:"+executeRet); JSONObject executeRetObj = JSON.parseObject(executeRet); if (executeRetObj.getIntValue("resCode") == 0){ From 86780cd8adfc4a58e4e600024e4f818eb0b5af6c Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Wed, 12 Jul 2023 11:21:03 +0800 Subject: [PATCH 15/19] fix bug --- .../java/com/iformall/service/park/impl/ketuo/KeTuoUtil.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoUtil.java index 4725e0262..9a4e7e0f7 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/ketuo/KeTuoUtil.java @@ -74,7 +74,9 @@ public class KeTuoUtil { param.put("payMethod", 1010);//付款方式 if (isDiscountMoney) { param.put("freeMoney", discountValue);//减免总金额(单位 分) + param.put("freeTime", 0); }else { + param.put("freeMoney", 0); param.put("freeTime", discountValue*3600);//减免总时长(单位 秒) } param.put("isCarLeave", 0);//车辆是否离场 From a0fc6b82d7109bc8105066af30c772287edf7ac3 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Wed, 12 Jul 2023 19:38:10 +0800 Subject: [PATCH 16/19] fix poi --- .../iformall/controller/mem/AsyncTask.java | 62 ++++++++++++++----- .../db/migration/V2023070600001_poi.sql | 2 + .../com/iformall/domain/po/WxMerchant.java | 6 ++ .../iformall/domain/vo/MerchantPoiTNew.java | 7 ++- .../enums/EnumMerchantCreateFrom.java | 36 +++++++++++ .../iformall/service/WxMerchantService.java | 1 + .../service/impl/WxMerchantServiceImpl.java | 27 ++++++++ .../resources/mapper/WxMerchantMapper.xml | 15 ++++- 8 files changed, 139 insertions(+), 17 deletions(-) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V2023070600001_poi.sql create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumMerchantCreateFrom.java diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 38cd402ed..4898dce78 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -21,6 +21,7 @@ import com.iformall.domain.vo.GaoDePoiInfo; import com.iformall.domain.vo.MerchantPoiT; import com.iformall.domain.vo.MerchantPoiTNew; import com.iformall.domain.vo.WxCardPriceTemplate; +import com.iformall.enums.EnumMerchantCreateFrom; import com.iformall.exception.MallinkException; import com.iformall.service.TtMerchantPoiService; import com.iformall.service.WxCUserBasicInfoService; @@ -306,7 +307,7 @@ public class AsyncTask { } } - private static final String[] poiImportFields = new String[]{"门店名称", "门店ID", "城市", "详细地址","管理员手机号","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","高德匹配备注","POI导入日志"}; + private static final String[] poiImportFields = new String[]{"门店名称", "门店ID", "城市", "详细地址","管理员手机号","富茂系统商户ID", "富茂系统商户名称","富茂系统省份", "富茂系统城市", "富茂系统地址","富茂系统经度", "富茂系统纬度","初始化商户日志","高德匹配备注","POI导入日志"}; public void exportExcelPoiDataAddLocationForNew(TenantEntity tenantEntity,String gaodeKey,File file,HttpServletRequest request, HttpServletResponse response) throws Exception { ImportParams params = new ImportParams(); @@ -435,35 +436,68 @@ public class AsyncTask { } @Async - public void importMerchantInit(boolean isAllNew,File file, MallUserInfo user, String importKey,HttpServletRequest request, HttpServletResponse response) { + public void importMerchantInit(File file, MallUserInfo user, String importKey,HttpServletRequest request, HttpServletResponse response) { // 需要验证 String[] needFields = new String[]{"门店名称", "门店ID", "城市", "详细地址"}; ExcelImportResult datalist = handleImportFile(null,file,MerchantPoiTNew.class,poiImportFields,needFields,new AsyncTask.PoiNewExcelHandler()); if (null == datalist) { return ; } - //如果不是覆盖,则查询商户中 - //查询所有匹配了poi的 + //查询所有来客创建的商户 + WxMerchant merchantQ = new WxMerchant(); + merchantQ.updateTenantInfo(user); + merchantQ.setCreateFrom(EnumMerchantCreateFrom.DOUYIN_LAIKE.getCode()); + Map createMerchantMap = wxMerchantService.findMerchantMapByCreateFromId(merchantQ); + if (null == createMerchantMap) { + createMerchantMap = new HashMap(); + } + //查询所有已经匹配了poi的商户 TtMerchantPoi poiQ = new TtMerchantPoi(); poiQ.updateTenantInfo(user); Map poiMerchantMap = ttMerchantPoiService.queryPoiMerchantMap(poiQ); + if (null == poiMerchantMap) { + poiMerchantMap = new HashMap(); + } List successList = datalist.getList(); if(successList.size() > 0) { try { - successList.parallelStream().forEach(poiBase -> { - try { - if (null != poiMerchantMap) { - TtMerchantPoi tp = poiMerchantMap.get(poiBase.getPoiId()); - if (null != tp && ) { - - } - } - wxMerchantService.initMerchantByPoi(poiBase.getPoiName(), poiBase.getPoiId()); + for (int i = 0 ; i < successList.size(); i ++) { + try { + MerchantPoiTNew poiBase = successList.get(i); + WxMerchant createM = createMerchantMap.get(poiBase.getPoiId()); + boolean create = true; + if (null != createM ) { + create = false; + if (createM.getId() > 0 ) { + poiBase.setMerchantId(String.valueOf(createM.getId())); + poiBase.setMerchantName(createM.getName()); + poiBase.setInitMerchantRemark("已存在该POI创建的商户,无需重复创建"); + }else { + poiBase.setMerchantName(createM.getName()); + poiBase.setInitMerchantRemark("初始化商户失败,已存在多个该POI创建的商户"); + } + }else { + TtMerchantPoi poi = poiMerchantMap.get(poiBase.getPoiId()); + if (null != poi) { + create = false; + if (poi.getId() > 0 ) { + poiBase.setMerchantId(String.valueOf(poi.getId())); + poiBase.setMerchantName(poi.getPoiName()); + poiBase.setInitMerchantRemark("已存在该POI创建的商户,无需重复创建"); + }else { + poiBase.setMerchantName(poi.getPoiName()); + poiBase.setInitMerchantRemark("初始化商户失败,该POI匹配了多个商户"); + } + } + } + if (create) { + wxMerchantService.initMerchantByPoi(poiBase.getPoiName(), poiBase.getPoiId()); + } } catch (UnknownSessionException ue) { logger.error("session :"+ue.getMessage(),ue); } - }); + } stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); exportExcel(request, response, successList,MerchantPoiTNew.class, "POI导入-结果.xlsx"); } catch (Exception e) { diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023070600001_poi.sql b/mallinkAdmin/src/main/resources/db/migration/V2023070600001_poi.sql new file mode 100644 index 000000000..1bd9c6fd5 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2023070600001_poi.sql @@ -0,0 +1,2 @@ +alter table wx_merchant add column create_from int(1) NOT NULL DEFAULT 1 COMMENT '创建来源EnumMerchantCreateFrom' ; +alter table wx_merchant add column create_from_id varchar(100) COMMENT '创建来源编号' ; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java index 44b63164e..8bb963e7f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java @@ -150,6 +150,12 @@ public class WxMerchant extends TenantEntity { // @Excel(name = "辅谈人", width = 20, orderNum = "17") @io.swagger.annotations.ApiModelProperty(value = "辅谈人", name = "talkUserAux") private String talkUserAux; + + @io.swagger.annotations.ApiModelProperty(value = "创建来源EnumMerchantCreateFrom", name = "createFrom") + private Integer createFrom; + + @io.swagger.annotations.ApiModelProperty(value = "创建来源Id", name = "createFromId") + private String createFromId; @TableField(exist = false) @io.swagger.annotations.ApiModelProperty(value = "开始时间", name = "startTime") diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java index 87f030135..273d4562c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantPoiTNew.java @@ -48,10 +48,13 @@ public class MerchantPoiTNew implements Serializable { @Excel(name = "富茂系统纬度", width = 20, orderNum = "12") @io.swagger.annotations.ApiModelProperty(value="富茂系统纬度",name="latitude") private BigDecimal latitude; - @Excel(name = "高德匹配备注", width = 20, orderNum = "13") + @Excel(name = "初始化商户日志", width = 20, orderNum = "13") + @io.swagger.annotations.ApiModelProperty(value="初始化商户日志",name="initMerchantRemark") + private String initMerchantRemark; + @Excel(name = "高德匹配备注", width = 20, orderNum = "14") @io.swagger.annotations.ApiModelProperty(value="高德匹配备注",name="gaodeRemark") private String gaodeRemark; - @Excel(name = "POI导入日志", width = 20, orderNum = "14") + @Excel(name = "POI导入日志", width = 20, orderNum = "15") @io.swagger.annotations.ApiModelProperty(value="POI导入日志",name="importRemark") private String importRemark; } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMerchantCreateFrom.java b/mallinkService/src/main/java/com/iformall/enums/EnumMerchantCreateFrom.java new file mode 100644 index 000000000..cdf800ed0 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMerchantCreateFrom.java @@ -0,0 +1,36 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ +public enum EnumMerchantCreateFrom { + + CREATE(1, "手动创建"), + DOUYIN_LAIKE(2, "抖音来客"); + + public static EnumMerchantCreateFrom getEnum(Integer code) { + for (EnumMerchantCreateFrom value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumMerchantCreateFrom(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java index feb586a04..69e8ce9cd 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java @@ -215,6 +215,7 @@ public interface WxMerchantService { WxMerchant findBrandAdmin(TenantEntity tenantEntity, Long brandId); Map findMerchantMap(WxMerchant merchantQ); + Map findMerchantMapByCreateFromId(WxMerchant merchantQ); WxMerchant findParkMerchant(WxPark wxPark); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 1060ed322..d5f72fc50 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -2087,6 +2087,33 @@ public class WxMerchantServiceImpl implements WxMerchantService { } return merchantMap; } + + @Override + public Map findMerchantMapByCreateFromId(WxMerchant merchantQ) { + + List list = this.findList(merchantQ); + if(null != list){ + Map merchantMap = new HashMap<>(); + for (int i = 0 ; i < list.size(); i++ ){ + WxMerchant m = list.get(i); + if (StringUtils.isNotBlank(m.getCreateFromId())) { + WxMerchant cm = merchantMap.get(m.getCreateFromId()); + if (null != cm) { + WxMerchant _m = new WxMerchant(); + _m.setId(-1L); + _m.setName("该编码已创建了多个商户"); + merchantMap.put(m.getCreateFromId(), _m); + }else { + merchantMap.put(m.getCreateFromId(), m); + } + } + } + if (merchantMap.size() > 0 ){ + return merchantMap; + } + } + return null; + } @Override public WxMerchant findParkMerchant(WxPark wxPark) { diff --git a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml index 33731b5a6..0ca012efd 100644 --- a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml @@ -48,12 +48,16 @@ + + + m.`id`,m.`tenant_id`,m.`parent_tenant_id`,m.`img_url`,m.`name`,m.`encode`,m.`link_phone`,m.`create_date`,m.`update_date`,m.`car_vendor_type`,m.`car_params`,m.`status`,m.`link_person`, m.`business_id`,m.`business_types`,m.`sub_business_id`,m.`shop_type`,m.`brand`,m.`type`,m.`is_public`,m.`is_private`,m.email,m.`title`,m.`cover_picture`,m.`is_admin`,m.`bill_setting`,m.`qr_code`,m.`tt_qr_code`, - m.`introduction`,m.`action_desc`,m.`mark`,m.mark_time,m.`is_del`,m.`talk_user_main`,m.`talk_user_aux`,m.link_line_phone,m.search_card_by_phone,m.credit_locked,m.credit_locked,m.entry_amount,m.cash_out_count,m.cash_out_last_time + m.`introduction`,m.`action_desc`,m.`mark`,m.mark_time,m.`is_del`,m.`talk_user_main`,m.`talk_user_aux`,m.link_line_phone,m.search_card_by_phone,m.credit_locked,m.credit_locked,m.entry_amount,m.cash_out_count, + m.cash_out_last_time,m.create_from,m.create_from_id @@ -168,6 +172,15 @@ and m.`credit_locked` = #{creditLocked} + + + and m.`create_from` = #{createFrom} + + + + and m.`create_from_id` = #{createFromId} + + and m.`is_admin` in From 929bedb27b51311fe0c568bc35efca55c7ebd3d7 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Wed, 12 Jul 2023 19:39:08 +0800 Subject: [PATCH 17/19] fix poi --- .../iformall/controller/basic/TtMerchantPoiController.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java index 0ba6a03b7..bdc10994b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtMerchantPoiController.java @@ -299,11 +299,6 @@ public class TtMerchantPoiController extends DouyinBaseController { @SystemControllerLog(description = "poi-初始化商户商户") public void importMerchantInitByPoi(@RequestParam("file") MultipartFile mFile,HttpServletRequest request, HttpServletResponse response) { try { - String isnew = request.getParameter("isnew"); - boolean isNew = false; - if ("1".equals(isnew)) { - isNew = true; - } boolean isSaas = this.isGoodLifeSaas(); if (!isSaas) { throw new MallinkException(Result.ERROR,"当前版本不支持"); @@ -312,7 +307,7 @@ public class TtMerchantPoiController extends DouyinBaseController { String userId = "" + user.getId(); String importKey = Constant.importPoiMerchantPrev + userId; File lFile = handlerImportFile(mFile,importKey,"poiMerchantInit"); - asyncTask.importMerchantInit(isNew,lFile, user, importKey,request,response); + asyncTask.importMerchantInit(lFile, user, importKey,request,response); } } catch (Exception e) { logger.error("importMerchantInitByPoi error.",e); From 30bff9d32d5d999e61f97309fe495f98bd4734ee Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Thu, 13 Jul 2023 10:42:36 +0800 Subject: [PATCH 18/19] fix --- .../src/main/java/com/iformall/controller/mem/AsyncTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 4898dce78..6aab4b446 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -499,7 +499,7 @@ public class AsyncTask { } } stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); - exportExcel(request, response, successList,MerchantPoiTNew.class, "POI导入-结果.xlsx"); + exportExcel(request, response, successList,MerchantPoiTNew.class, "POI初始化商户.xlsx"); } catch (Exception e) { logger.error("导入模板失败:"+e.getMessage(),e); stringRedisTemplate.expire(importKey,10, TimeUnit.SECONDS); From 987717fc55567bc27f2c717c74c3f139bfb878f7 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Thu, 13 Jul 2023 17:26:04 +0800 Subject: [PATCH 19/19] fix poi --- .../iformall/controller/mem/AsyncTask.java | 9 +- .../iformall/service/WxMerchantService.java | 3 +- .../com/iformall/service/WxShopService.java | 2 + .../service/impl/WxMerchantServiceImpl.java | 106 +++++++++++++++++- .../service/impl/WxShopServiceImpl.java | 12 ++ 5 files changed, 126 insertions(+), 6 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java index 6aab4b446..aed348921 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/AsyncTask.java @@ -492,7 +492,14 @@ public class AsyncTask { } } if (create) { - wxMerchantService.initMerchantByPoi(poiBase.getPoiName(), poiBase.getPoiId()); + try { + WxMerchant merchant = wxMerchantService.initMerchantByPoi(user,poiBase.getPoiName(), poiBase.getPoiId(),poiBase.getPhone()); + poiBase.setMerchantId(String.valueOf(merchant.getId())); + poiBase.setMerchantName(merchant.getName()); + poiBase.setInitMerchantRemark("初始化商户成功."); + }catch(Exception e) { + poiBase.setInitMerchantRemark("初始化商户失败."+e.getMessage()); + } } } catch (UnknownSessionException ue) { logger.error("session :"+ue.getMessage(),ue); diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java index 69e8ce9cd..010911baa 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java @@ -3,6 +3,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.dto.WxMerchantDto; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxBusinessCircleOrder; import com.iformall.domain.po.WxMerchantCorp; import com.iformall.domain.po.WxPark; @@ -225,5 +226,5 @@ public interface WxMerchantService { List selectByMerchantIds(String merchantName); - void initMerchantByPoi(String poiName,String poiId); + WxMerchant initMerchantByPoi(MallUserInfo user,String poiName,String poiId,String phone) throws Exception; } diff --git a/mallinkService/src/main/java/com/iformall/service/WxShopService.java b/mallinkService/src/main/java/com/iformall/service/WxShopService.java index edb466c26..76df4fba5 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxShopService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxShopService.java @@ -103,5 +103,7 @@ public interface WxShopService { */ Map> findMerchantShopVoListMap(TenantEntity tenantEntity, List merchantIds); List findMerchantShopVoList(TenantEntity tenantEntity,Long merchantId); + + WxShop getShopByShopNumber(TenantEntity tenantEntity,String shopNumber); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index d5f72fc50..ee22ba610 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -156,6 +156,10 @@ public class WxMerchantServiceImpl implements WxMerchantService { @Autowired WxMerchantRelationService wxMerchantRelationService; + @Lazy + @Autowired + private WxMallBuildingService wxMallBuildingService; + @Autowired @Qualifier("objectCommonRedisTemplate") RedisTemplate redisTemplate; @@ -2167,8 +2171,102 @@ public class WxMerchantServiceImpl implements WxMerchantService { return wxMerchantMapper.findIdList(merchant); } + private WxShop initShopByPoiId(TenantEntity tenantEntity,String poiId) throws Exception { + String shopNumber = "DYPOI-"+poiId; + WxShop shop = wxShopService.getShopByShopNumber(tenantEntity, shopNumber); + if (null == shop) { + Long buildingId = null; + Long floorId = null; + try { + ResultData builds = wxMallBuildingService.getBuildingFloorList(tenantEntity); + if (null == builds || null == builds.data) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"楼层楼座未查询到."); + } + List wxMallBuildings = (List) builds.data; + if (null == wxMallBuildings || wxMallBuildings.size() <= 0 ){ + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"楼层楼座未查询到."); + } + WxMallBuilding building = wxMallBuildings.get(0); + buildingId = building.getId() ; + List floors = building.getFloors(); + if (null == floors || floors.size() <= 0 ){ + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"楼座"+building.getBuildingName()+"没有楼层"); + } + floorId = floors.get(0).getId(); + } catch(Exception e) { + logger.error("initMerchantByPoi error.",e); + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"楼层楼座查询错误."+e.getMessage()); + } + shop = new WxShop(); + shop.updateTenantInfo(tenantEntity); + shop.setBuildArea("0"); + shop.setShopNumber(shopNumber); + shop.setBuilding(buildingId); + shop.setFloor(floorId); + shop.setOperationArea("0"); + shop.setBusinessId(0); + shop.setRentUnit(2); + wxShopService.saveOrUpdate(shop); + } + return shop; + } + + private WxMerchant initMerchantByPoiId(WxShop shop,MallUserInfo user,String poiName, String poiId,String phone) { + WxMerchant merchantQ = new WxMerchant(); + merchantQ.updateTenantInfo(user); + merchantQ.setCreateFrom(EnumMerchantCreateFrom.DOUYIN_LAIKE.getCode()); + merchantQ.setCreateFromId(poiId); + Map poiCreateMerchant = this.findMerchantMapByCreateFromId(merchantQ); + WxMerchant merchant = null; + if (null != poiCreateMerchant) { + merchant = poiCreateMerchant.get(poiId); + } + if (null == merchant) { + merchant = new WxMerchant(); + merchant.setIsAdmin(EnumMerchantAdmin.PUBLIC_COMMON.getCode()); + merchant.setCarVendorType(0); + merchant.setImgUrl("https://formall.oss-accelerate.aliyuncs.com/234/WechatIMG5071.png"); + merchant.setName(poiName); + if (StringUtils.isBlank(phone)) { + merchant.setLinkPhone("11111111111"); + }else { + merchant.setLinkPhone(phone); + } + merchant.setLinkPerson("default"); + List shopIds = new ArrayList(); + shopIds.add(shop.getId()); + merchant.setShopids(shopIds); + merchant.setBusinessId(shop.getBusinessId()); + merchant.setType(1); + merchant.setCreateFrom(EnumMerchantCreateFrom.DOUYIN_LAIKE.getCode()); + merchant.setCreateFromId(poiId); + this.addMerchant(merchant, user.getId()); + } + return merchant; + } + @Override - public void initMerchantByPoi(String poiName, String poiId) { - - } -} + public WxMerchant initMerchantByPoi(MallUserInfo user,String poiName, String poiId,String phone) throws Exception{ + WxShop shop = initShopByPoiId(user,poiId); + if (null == shop) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"商铺信息初始化失败"); + } + WxMerchant merchant = initMerchantByPoiId(shop, user, poiName, poiId, phone); + if (null == merchant) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"商户信息初始化失败"); + } + //加管理员 + if (StringUtils.isNotBlank(phone)) { + List users = new ArrayList(); + WxMerchantBUser buser = new WxMerchantBUser(); + buser.setName("管理员"); + buser.setPhone(phone); + buser.setUserPwd("123456Abc"); + buser.setIsAdmin(merchant.getIsAdmin()); + users.add(buser); + merchant.setUsers(users); + this.updateMerchantAdmin(merchant) ; + } + return merchant; + } +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java index 8ad3bd5dd..03758d5c7 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java @@ -709,4 +709,16 @@ public class WxShopServiceImpl implements WxShopService { Map> map = findMerchantShopVoListMap(tenantEntity, merchantIds); return map.get(merchantId); } + + @Override + public WxShop getShopByShopNumber(TenantEntity tenantEntity,String shopNumber) { + WxShop shopQ = new WxShop(); + shopQ.updateTenantInfo(tenantEntity); + shopQ.setShopNumber(shopNumber); + List shopList = wxShopMapper.findList(shopQ); + if (null != shopList && shopList.size() > 0 ) { + return shopList.get(0); + } + return null; + } }