@@ -370,6 +370,15 @@ public enum ErrorCode{ | |||||
*/ | */ | ||||
MSG_MODEL_NOT_FOUND(27000, "找不到短信模板"), | MSG_MODEL_NOT_FOUND(27000, "找不到短信模板"), | ||||
MSG_CONFIG_NOT_FOUND(27001, "找不到短信配置"), | MSG_CONFIG_NOT_FOUND(27001, "找不到短信配置"), | ||||
/** | |||||
* 文件上传 | |||||
*/ | |||||
PICTURE_SIZE_EXCEED(40001, "图片超过2M限制"), | |||||
PICTURE_ANALYZING_ERROR(40002, "您上传的图片无法解析,请检查"), | |||||
PICTURE_SIZE_CUSTOMIZE(40003, "图片超过大小限制"), | |||||
PICTURE_W_H_CUSTOMIZE(40004, "图片不符合宽高限制"), | |||||
PICTURE_ENDWIDTH_ERROR(40005, "格式不正确"), | |||||
; | ; | ||||
private int code; | private int code; | ||||
@@ -0,0 +1,116 @@ | |||||
package com.iformall.domain.po; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import com.google.gson.JsonObject; | |||||
import com.iformall.utils.Constant; | |||||
import lombok.Data; | |||||
import lombok.EqualsAndHashCode; | |||||
import lombok.ToString; | |||||
import java.util.Date; | |||||
@TableName(value = "tt_merchant_poi") | |||||
@Data | |||||
@ToString(callSuper = true) | |||||
@EqualsAndHashCode(callSuper = true) | |||||
public class TtMerchantPoi extends BaseEntity { | |||||
protected Long id;//merchant_id | |||||
@io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") | |||||
private String tenantId; | |||||
@io.swagger.annotations.ApiModelProperty(value="父租户ID",name="parentTenantId") | |||||
protected String parentTenantId; | |||||
@io.swagger.annotations.ApiModelProperty(value=" merchant_id",name="supplierExtId") | |||||
private String supplierExtId; | |||||
@io.swagger.annotations.ApiModelProperty(value="商户名",name="merchantName") | |||||
private String merchantName; | |||||
@io.swagger.annotations.ApiModelProperty(value="商户省",name="merchantProvince") | |||||
private String merchantProvince; | |||||
@io.swagger.annotations.ApiModelProperty(value="商户市",name="merchantCity") | |||||
private String merchantCity; | |||||
@io.swagger.annotations.ApiModelProperty(value="商户地址",name="merchantAddr") | |||||
private String merchantAddr; | |||||
@io.swagger.annotations.ApiModelProperty(value="经度",name="longitude") | |||||
private Float longitude; | |||||
@io.swagger.annotations.ApiModelProperty(value="纬度",name="latitude") | |||||
private Float latitude; | |||||
@io.swagger.annotations.ApiModelProperty(value="高德POI ID",name="amapId") | |||||
private String amapId; | |||||
@io.swagger.annotations.ApiModelProperty(value="其他信息",name="extra") | |||||
private String extra; | |||||
@io.swagger.annotations.ApiModelProperty(value="高德POI ID/抖音POIID",name="poiId") | |||||
private String poiId; | |||||
@io.swagger.annotations.ApiModelProperty(value="poi名称 ",name="poiName") | |||||
private String poiName; | |||||
@io.swagger.annotations.ApiModelProperty(value="省",name="province") | |||||
private String province; | |||||
@io.swagger.annotations.ApiModelProperty(value="市",name="city") | |||||
private String city; | |||||
@io.swagger.annotations.ApiModelProperty(value="地址",name="address") | |||||
private String address; | |||||
@io.swagger.annotations.ApiModelProperty(value="抖音平台任务ID",name="taskId") | |||||
private String taskId; | |||||
@io.swagger.annotations.ApiModelProperty(value="EnumSupplierMathStatus 匹配状态,0-等待匹配,1-正在匹配,2-匹配成功,3-匹配失败",name="matchStatus") | |||||
private Integer matchStatus; | |||||
@io.swagger.annotations.ApiModelProperty(value="匹配状态描述",name="mismatchStatusDesc") | |||||
private String mismatchStatusDesc; | |||||
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | |||||
private Date createDate; | |||||
@io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") | |||||
private Date updateDate; | |||||
@io.swagger.annotations.ApiModelProperty(value="抖音平台商户ID",name="supplierId") | |||||
private String supplierId; | |||||
@io.swagger.annotations.ApiModelProperty(value="EnumSupplierSyncStatus 同步状态, 0 - 未处理; 1 - 通过; 2 - 未通过",name="syncStatus") | |||||
private Integer syncStatus; | |||||
@io.swagger.annotations.ApiModelProperty(value="EnumSupplierSyncStatus 最近一次同步状态, 0 - 未处理; 1 - 通过; 2 - 未通过",name="lastSyncStatus") | |||||
private Integer lastSyncStatus; | |||||
@io.swagger.annotations.ApiModelProperty(value="同步失败原因,抖音风控政策问题,该字段无法提供太多信息,目前审核不通过联系抖音运营做进一步处理",name="failReason") | |||||
private String failReason; | |||||
@io.swagger.annotations.ApiModelProperty(value="商铺营业执照路径",name="bizLicencePath") | |||||
private String bizLicencePath; | |||||
@io.swagger.annotations.ApiModelProperty(value="营业执照审核详细",name="bizLicenceStatus") | |||||
private String bizLicenceStatus; | |||||
@io.swagger.annotations.ApiModelProperty(value="商家授权函(或与小程序的合作协议)路径",name="contractPath") | |||||
private String contractPath; | |||||
@io.swagger.annotations.ApiModelProperty(value="商家授权函审核详细",name="contractStatus") | |||||
private String contractStatus; | |||||
@io.swagger.annotations.ApiModelProperty(value="商铺行业资质材料信息",name="qualMaterial") | |||||
private String qualMaterial; | |||||
@io.swagger.annotations.ApiModelProperty(value="商铺行业资质材料信息审核详细",name="qualMaterialStatus") | |||||
private String qualMaterialStatus; | |||||
@io.swagger.annotations.ApiModelProperty(value="其他补充资质",name="additionalQual") | |||||
private String additionalQual; | |||||
@io.swagger.annotations.ApiModelProperty(value="其他补充资质审核详细",name="additionalQualStatus") | |||||
private String additionalQualStatus; | |||||
@io.swagger.annotations.ApiModelProperty(value="所有资质的最早过期时间",name="expireTime") | |||||
private String expireTime; | |||||
} |
@@ -0,0 +1,92 @@ | |||||
package com.iformall.enums; | |||||
/** | |||||
* app平台 | |||||
* @author alascor | |||||
*/ | |||||
public enum EnumMeterialType { | |||||
/** | |||||
* * 1 小程序图标 修改小程序图标接口 小于等于 2MB jpeg、jpg、png 像素为 200 * 200 | |||||
* * 2 小程序服务类目资质材料 增加服务类目接口 | |||||
* * 补充服务类目资质信息接口 小于等于 2MB jpeg、jpg、png | |||||
* * 3 小程序名称审核材料 修改小程序名称接口 小于等于 2MB jpeg、jpg、png | |||||
* * 4 小程序落地页截图 申请「短视频挂载」能力接口 小于等于 2MB jpeg、jpg、png | |||||
* * 5 场景示例图 申请「获取用户手机号」能力接口 小于等于 5MB jpeg、jpg、png | |||||
* * 6 小程序分享模板图片 新增分享模板接口 | |||||
* * 修改分享模板接口 小于等于 1MB jpeg、jpg、png 像素为 500 * 400 | |||||
* * 7 商铺营业执照、行业资质材料 提交商铺资质材料接口 小于等于 4MB jpeg、jpg、png | |||||
* * 8 服务商和商家的合作协议 提交商铺资质材料接口 小于等于 4MB pdf | |||||
*/ | |||||
one(1,"小程序图标",2097152,"jpeg,jpg、png",200,200), | |||||
two(2,"小程序服务类目资质材料",2097152,"jpeg,jpg、png",null,null), | |||||
three(3,"小程序名称审核材料",2097152,"jpeg,jpg、png",null,null), | |||||
four(4,"小程序落地页截图",2097152,"jpeg,jpg、png",null,null), | |||||
five(5,"场景示例图",5242880,"jpeg,jpg、png",null,null), | |||||
six(6,"小程序分享模板图片",1048576,"jpeg,jpg、png",500,400), | |||||
seven(7,"商铺营业执照、行业资质材料",4194304,"jpeg,jpg、png",null,null), | |||||
enght(8,"服务商和商家的合作协议",4194304,"pdf",null,null), | |||||
; | |||||
EnumMeterialType(Integer code, String name,Integer size,String prefix,Integer wide,Integer height) { | |||||
this.code = code; | |||||
this.name = name; | |||||
this.size = size; | |||||
this.prefix = prefix; | |||||
this.wide = wide; | |||||
this.height = height; | |||||
} | |||||
private Integer code; | |||||
private String name; | |||||
private Integer size; | |||||
private String prefix; | |||||
private Integer wide; | |||||
private Integer height; | |||||
public Integer getCode() { | |||||
return code; | |||||
} | |||||
public void setCode(Integer code) { | |||||
this.code = code; | |||||
} | |||||
public String getName() { | |||||
return name; | |||||
} | |||||
public void setName(String name) { | |||||
this.name = name; | |||||
} | |||||
public Integer getSize() { | |||||
return size; | |||||
} | |||||
public void setSize(Integer size) { | |||||
this.size = size; | |||||
} | |||||
public String getPrefix() { | |||||
return prefix; | |||||
} | |||||
public void setPrefix(String prefix) { | |||||
this.prefix = prefix; | |||||
} | |||||
public Integer getWide() { | |||||
return wide; | |||||
} | |||||
public void setWide(Integer wide) { | |||||
this.wide = wide; | |||||
} | |||||
public Integer getHeight() { | |||||
return height; | |||||
} | |||||
public void setHeight(Integer height) { | |||||
this.height = height; | |||||
} | |||||
public static EnumMeterialType getByCode(Integer code) { | |||||
for (EnumMeterialType e : EnumMeterialType.values()) { | |||||
if (e.getCode().intValue() == code.intValue()) { | |||||
return e; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} |
@@ -0,0 +1,18 @@ | |||||
package com.iformall.mapper; | |||||
import com.iformall.common.CommonMapper; | |||||
import com.iformall.domain.po.TtMerchantPoi; | |||||
import java.util.List; | |||||
public interface TtMerchantPoiMapper extends CommonMapper<TtMerchantPoi, Long> { | |||||
List<TtMerchantPoi> findList(TtMerchantPoi record); | |||||
List<Long> findIdList(TtMerchantPoi record); | |||||
List<TtMerchantPoi> findTaskIdList(TtMerchantPoi record); | |||||
int deleteByUpdate(Long id); | |||||
} |
@@ -0,0 +1,24 @@ | |||||
package com.iformall.service; | |||||
import com.github.pagehelper.PageInfo; | |||||
import com.iformall.domain.po.TtMerchantPoi; | |||||
/** | |||||
* @author gongbiao | |||||
*/ | |||||
public interface TtMerchantPoiService { | |||||
/** | |||||
* 根据实体查询分页列表 | |||||
* | |||||
* @param record | |||||
* @param pageIndex | |||||
* @param pageSize | |||||
* @return | |||||
*/ | |||||
PageInfo<TtMerchantPoi> listAsPage(TtMerchantPoi record, Integer pageIndex, Integer pageSize); | |||||
TtMerchantPoi getById(Long id); | |||||
} |
@@ -0,0 +1,37 @@ | |||||
package com.iformall.service.impl; | |||||
import com.github.pagehelper.PageHelper; | |||||
import com.github.pagehelper.PageInfo; | |||||
import com.iformall.domain.po.TtMerchantPoi; | |||||
import com.iformall.mapper.TtMerchantPoiMapper; | |||||
import com.iformall.service.TtMerchantPoiService; | |||||
import org.slf4j.Logger; | |||||
import org.slf4j.LoggerFactory; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.stereotype.Service; | |||||
/** | |||||
* @author gongbiao | |||||
*/ | |||||
@Service | |||||
public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { | |||||
private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
@Autowired | |||||
TtMerchantPoiMapper ttMerchantPoiMapper; | |||||
@Override | |||||
public PageInfo<TtMerchantPoi> listAsPage(TtMerchantPoi record, Integer pageIndex, Integer pageSize) { | |||||
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> ttMerchantPoiMapper.findList(record)); | |||||
} | |||||
@Override | |||||
public TtMerchantPoi getById(Long id) { | |||||
return ttMerchantPoiMapper.selectById(id); | |||||
} | |||||
} |
@@ -0,0 +1,67 @@ | |||||
package com.iformall.service.toutiao.api; | |||||
import me.chanjar.weixin.common.WxType; | |||||
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | |||||
import me.chanjar.weixin.common.error.WxError; | |||||
import me.chanjar.weixin.common.error.WxErrorException; | |||||
import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; | |||||
import me.chanjar.weixin.common.util.http.RequestExecutor; | |||||
import me.chanjar.weixin.common.util.http.RequestHttp; | |||||
import me.chanjar.weixin.common.util.http.ResponseHandler; | |||||
import me.chanjar.weixin.common.util.http.apache.Utf8ResponseHandler; | |||||
import org.apache.http.HttpEntity; | |||||
import org.apache.http.HttpHost; | |||||
import org.apache.http.client.config.RequestConfig; | |||||
import org.apache.http.client.methods.CloseableHttpResponse; | |||||
import org.apache.http.client.methods.HttpPost; | |||||
import org.apache.http.entity.mime.HttpMultipartMode; | |||||
import org.apache.http.entity.mime.MultipartEntityBuilder; | |||||
import org.apache.http.impl.client.CloseableHttpClient; | |||||
import java.io.File; | |||||
import java.io.IOException; | |||||
/** | |||||
* Created by ecoolper on 2017/5/5. | |||||
*/ | |||||
public class TtMediaUploadRequestExecutor implements RequestExecutor<String, File> { | |||||
protected RequestHttp<CloseableHttpClient, HttpHost> requestHttp; | |||||
public TtMediaUploadRequestExecutor(RequestHttp requestHttp) { | |||||
this.requestHttp = requestHttp; | |||||
} | |||||
@Override | |||||
public void execute(String uri, File data, ResponseHandler<String> handler, WxType wxType) throws WxErrorException, IOException { | |||||
handler.handle(this.execute(uri, data, wxType)); | |||||
} | |||||
@Override | |||||
public String execute(String uri, File file, WxType wxType) throws WxErrorException, IOException { | |||||
HttpPost httpPost = new HttpPost(uri); | |||||
if (requestHttp.getRequestHttpProxy() != null) { | |||||
RequestConfig config = RequestConfig.custom().setProxy(requestHttp.getRequestHttpProxy()).build(); | |||||
httpPost.setConfig(config); | |||||
} | |||||
if (file != null) { | |||||
HttpEntity entity = MultipartEntityBuilder | |||||
.create() | |||||
.addBinaryBody("material_file", file) | |||||
.setMode(HttpMultipartMode.RFC6532) | |||||
.build(); | |||||
httpPost.setEntity(entity); | |||||
} | |||||
try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpPost)) { | |||||
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); | |||||
WxError error = WxError.fromJson(responseContent, wxType); | |||||
if (error.getErrorCode() != 0) { | |||||
throw new WxErrorException(error); | |||||
} | |||||
return responseContent; | |||||
} finally { | |||||
httpPost.releaseConnection(); | |||||
} | |||||
} | |||||
} |
@@ -2,12 +2,14 @@ package com.iformall.service.toutiao.api; | |||||
import com.iformall.service.toutiao.api.bean.TtOpenResult; | import com.iformall.service.toutiao.api.bean.TtOpenResult; | ||||
import com.iformall.service.toutiao.miniapp.TtMaService; | import com.iformall.service.toutiao.miniapp.TtMaService; | ||||
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | |||||
import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||
import me.chanjar.weixin.open.bean.ma.WxMaOpenCommitExtInfo; | import me.chanjar.weixin.open.bean.ma.WxMaOpenCommitExtInfo; | ||||
import me.chanjar.weixin.open.bean.message.WxOpenMaSubmitAuditMessage; | import me.chanjar.weixin.open.bean.message.WxOpenMaSubmitAuditMessage; | ||||
import me.chanjar.weixin.open.bean.result.*; | import me.chanjar.weixin.open.bean.result.*; | ||||
import java.io.File; | import java.io.File; | ||||
import java.io.InputStream; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; | ||||
@@ -230,6 +232,11 @@ public interface TtOpenMaService extends TtMaService { | |||||
*/ | */ | ||||
String API_SPEED_AUDIT = "https://api.weixin.qq.com/wxa/speedupaudit"; | String API_SPEED_AUDIT = "https://api.weixin.qq.com/wxa/speedupaudit"; | ||||
/** | |||||
* 代授权小程序上传资源 | |||||
*/ | |||||
String API_UPLOAD_MATERIAL = "https://open.microapp.bytedance.com/openapi/v1/microapp/upload_material"; | |||||
/** | /** | ||||
* 获得小程序的域名配置信息 | * 获得小程序的域名配置信息 | ||||
@@ -478,6 +485,11 @@ public interface TtOpenMaService extends TtMaService { | |||||
*/ | */ | ||||
WxOpenResult publishQrcodeJump(String prefix) throws WxErrorException; | WxOpenResult publishQrcodeJump(String prefix) throws WxErrorException; | ||||
String mediaUpload(Integer mediaType, String fileType, InputStream inputStream) throws WxErrorException; | |||||
String mediaUpload(Integer mediaType, File file) throws WxErrorException; | |||||
// /** | // /** | ||||
// * 小程序用户隐私保护指引服务 | // * 小程序用户隐私保护指引服务 | ||||
// * | // * | ||||
@@ -5,6 +5,7 @@ import cn.binarywang.wx.miniapp.config.WxMaConfig; | |||||
import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; | import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; | ||||
import com.google.gson.JsonArray; | import com.google.gson.JsonArray; | ||||
import com.google.gson.JsonObject; | import com.google.gson.JsonObject; | ||||
import com.iformall.service.toutiao.api.TtMediaUploadRequestExecutor; | |||||
import com.iformall.service.toutiao.api.TtOpenComponentService; | import com.iformall.service.toutiao.api.TtOpenComponentService; | ||||
import com.iformall.service.toutiao.api.TtOpenMaService; | import com.iformall.service.toutiao.api.TtOpenMaService; | ||||
import com.iformall.service.toutiao.api.bean.TtOpenGsonBuilder; | import com.iformall.service.toutiao.api.bean.TtOpenGsonBuilder; | ||||
@@ -14,7 +15,10 @@ import com.iformall.service.toutiao.miniapp.TtMaQrcode; | |||||
import com.iformall.service.toutiao.miniapp.TtQrcodeRequestExecutor; | import com.iformall.service.toutiao.miniapp.TtQrcodeRequestExecutor; | ||||
import com.iformall.service.toutiao.miniapp.impl.TtMaServiceImpl; | import com.iformall.service.toutiao.miniapp.impl.TtMaServiceImpl; | ||||
import lombok.extern.java.Log; | import lombok.extern.java.Log; | ||||
import me.chanjar.weixin.common.error.WxError; | |||||
import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||
import me.chanjar.weixin.common.util.fs.FileUtils; | |||||
import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; | |||||
import me.chanjar.weixin.open.bean.ma.WxMaOpenCommitExtInfo; | import me.chanjar.weixin.open.bean.ma.WxMaOpenCommitExtInfo; | ||||
import me.chanjar.weixin.open.bean.ma.WxMaQrcodeParam; | import me.chanjar.weixin.open.bean.ma.WxMaQrcodeParam; | ||||
import me.chanjar.weixin.open.bean.message.WxOpenMaSubmitAuditMessage; | import me.chanjar.weixin.open.bean.message.WxOpenMaSubmitAuditMessage; | ||||
@@ -24,8 +28,13 @@ import org.slf4j.Logger; | |||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import java.io.File; | import java.io.File; | ||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; | ||||
import java.util.UUID; | |||||
import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Material.MEDIA_UPLOAD_URL; | |||||
/** | /** | ||||
* | * | ||||
@@ -649,6 +658,31 @@ public class TtOpenMaServiceImpl extends TtMaServiceImpl implements TtOpenMaServ | |||||
return WxMaGsonBuilder.create().fromJson(response, WxOpenResult.class); | return WxMaGsonBuilder.create().fromJson(response, WxOpenResult.class); | ||||
} | } | ||||
@Override | |||||
public String mediaUpload(Integer mediaType, String fileType, InputStream inputStream) throws WxErrorException { | |||||
File tmpFile = null; | |||||
try { | |||||
tmpFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), fileType); | |||||
return this.mediaUpload(mediaType, tmpFile); | |||||
} catch (IOException e) { | |||||
throw new WxErrorException(WxError.builder().errorCode(-1).errorMsg(e.getMessage()).build(), e); | |||||
} finally { | |||||
if (tmpFile != null) { | |||||
tmpFile.delete(); | |||||
} | |||||
} | |||||
} | |||||
@Override | |||||
public String mediaUpload(Integer mediaType, File file) throws WxErrorException { | |||||
String uri = API_UPLOAD_MATERIAL +"?component_appid="+ttOpenComponentService.getWxOpenConfigStorage().getComponentAppId() | |||||
+"&authorizer_access_token="+getAccessToken(false) | |||||
+"&material_type="+mediaType; | |||||
TtMediaUploadRequestExecutor executor = new TtMediaUploadRequestExecutor(this.getRequestHttp()); | |||||
return this.execute(executor, uri, file); | |||||
} | |||||
/** | /** | ||||
* 将字符串对象转化为GsonArray对象 | * 将字符串对象转化为GsonArray对象 | ||||
* | * | ||||
@@ -0,0 +1,141 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
<mapper namespace="com.iformall.mapper.TtMerchantPoiMapper"> | |||||
<resultMap id="BaseResultMap" type="com.iformall.domain.po.TtMerchantPoi"> | |||||
<id column="id" jdbcType="BIGINT" property="id"/> | |||||
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/> | |||||
<result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId"/> | |||||
<result column="supplier_ext_id" jdbcType="VARCHAR" property="supplierExtId"/> | |||||
<result column="merchant_name" jdbcType="VARCHAR" property="merchantName"/> | |||||
<result column="merchant_province" jdbcType="VARCHAR" property="merchantProvince"/> | |||||
<result column="merchant_city" jdbcType="VARCHAR" property="merchantCity"/> | |||||
<result column="merchant_addr" jdbcType="VARCHAR" property="merchantAddr"/> | |||||
<result column="longitude" jdbcType="FLOAT" property="longitude"/> | |||||
<result column="latitude" jdbcType="FLOAT" property="latitude"/> | |||||
<result column="amap_id" jdbcType="VARCHAR" property="amapId"/> | |||||
<result column="extra" jdbcType="VARCHAR" property="extra"/> | |||||
<result column="poi_id" jdbcType="VARCHAR" property="poiId"/> | |||||
<result column="poi_name" jdbcType="VARCHAR" property="poiName"/> | |||||
<result column="province" jdbcType="VARCHAR" property="province"/> | |||||
<result column="city" jdbcType="VARCHAR" property="city"/> | |||||
<result column="address" jdbcType="VARCHAR" property="address"/> | |||||
<result column="task_id" jdbcType="VARCHAR" property="taskId"/> | |||||
<result column="match_status" jdbcType="INTEGER" property="matchStatus"/> | |||||
<result column="mismatch_status_desc" jdbcType="VARCHAR" property="mismatchStatusDesc"/> | |||||
<result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | |||||
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | |||||
<result column="supplier_id" jdbcType="VARCHAR" property="supplierId"/> | |||||
<result column="sync_status" jdbcType="INTEGER" property="syncStatus"/> | |||||
<result column="last_sync_status" jdbcType="INTEGER" property="lastSyncStatus"/> | |||||
<result column="fail_reason" jdbcType="VARCHAR" property="failReason"/> | |||||
<result column="biz_licence_path" jdbcType="VARCHAR" property="bizLicencePath"/> | |||||
<result column="biz_licence_status" jdbcType="VARCHAR" property="bizLicenceStatus"/> | |||||
<result column="contract_path" jdbcType="VARCHAR" property="contractPath"/> | |||||
<result column="contract_status" jdbcType="VARCHAR" property="contractStatus"/> | |||||
<result column="qual_material" jdbcType="VARCHAR" property="qualMaterial"/> | |||||
<result column="qual_material_status" jdbcType="VARCHAR" property="qualMaterialStatus"/> | |||||
<result column="additional_qual" jdbcType="VARCHAR" property="additionalQual"/> | |||||
<result column="additional_qual_status" jdbcType="VARCHAR" property="additionalQualStatus"/> | |||||
<result column="expire_time" jdbcType="VARCHAR" property="expireTime"/> | |||||
</resultMap> | |||||
<sql id="allColumns"> | |||||
`id`,`tenant_id`,`parent_tenant_id`,`supplier_ext_id`, | |||||
`merchant_name`,`merchant_province`,`merchant_city`,`merchant_addr`,`longitude`,`latitude`, | |||||
`amap_id`,`extra`, | |||||
`poi_id`,`poi_name`,`province`,`city`,`address`, | |||||
`task_id`,`match_status`,`mismatch_status_desc`, | |||||
`create_date`,`update_date`, | |||||
`supplier_id`,`sync_status`,`last_sync_status`,`fail_reason`, | |||||
`biz_licence_path`,`biz_licence_status`,`contract_path`,`contract_status`,`qual_material`,`qual_material_status`,`additional_qual`,`additional_qual_status`,`expire_time` | |||||
</sql> | |||||
<sql id="dynamicWhereConditions"> | |||||
where is_del = 0 | |||||
<if test=" null != id "> | |||||
and `id` = #{id} | |||||
</if> | |||||
<if test=" null != tenantId and '' != tenantId"> | |||||
and `tenant_id` = #{tenantId} | |||||
</if> | |||||
<if test=" null != parentTenantId and '' != parentTenantId"> | |||||
and `parent_tenant_id` = #{parentTenantId} | |||||
</if> | |||||
<if test=" null != supplierExtId and '' != supplierExtId"> | |||||
and `supplier_ext_id` = #{supplierExtId} | |||||
</if> | |||||
<if test=" null != poiId and ''!= poiId "> | |||||
and `poi_id` = #{poiId} | |||||
</if> | |||||
<if test=" null != merchantName and ''!= merchantName "> | |||||
and `merchant_name` like concat('%', #{merchantName},'%') | |||||
</if> | |||||
<if test=" null != taskId and ''!= taskId "> | |||||
and `task_id` = #{taskId} | |||||
</if> | |||||
<if test=" null != matchStatus"> | |||||
and `match_status` = #{matchStatus} | |||||
</if> | |||||
<if test=" null != supplierId and '' != supplierId"> | |||||
and `supplier_id` = #{supplierId} | |||||
</if> | |||||
<if test=" null != syncStatus"> | |||||
and `sync_status` = #{syncStatus} | |||||
</if> | |||||
<if test=" null != lastSyncStatus"> | |||||
and `last_sync_status` = #{lastSyncStatus} | |||||
</if> | |||||
<if test=" null != ids "> | |||||
and `id` in | |||||
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
#{idItem} | |||||
</foreach> | |||||
</if> | |||||
<if test=" null != sortColumns">order by ${sortColumns}</if> | |||||
</sql> | |||||
<select id="findList" parameterType="com.iformall.domain.po.TtMerchantPoi" resultMap="BaseResultMap"> | |||||
select | |||||
<include refid="allColumns"/> | |||||
from tt_merchant_poi | |||||
<include refid="dynamicWhereConditions"/> | |||||
</select> | |||||
<select id="findIdList" parameterType="com.iformall.domain.po.TtMerchantPoi" resultType="Long"> | |||||
select id | |||||
from tt_merchant_poi | |||||
<include refid="dynamicWhereConditions"/> | |||||
</select> | |||||
<select id="findTaskIdList" parameterType="com.iformall.domain.po.TtMerchantPoi" resultType="String"> | |||||
select distinct `tenant_id`,`parent_tenant_id`,`task_id` | |||||
from tt_merchant_poi | |||||
<include refid="dynamicWhereConditions"/> | |||||
</select> | |||||
<update id="deleteByUpdate" parameterType="Long"> | |||||
update tt_merchant_poi set is_del = 1 | |||||
where id = #{id} | |||||
</update> | |||||
</mapper> |
@@ -0,0 +1,140 @@ | |||||
package com.iformall.controller; | |||||
import com.github.pagehelper.PageInfo; | |||||
import com.iformall.common.ErrorCode; | |||||
import com.iformall.common.Result; | |||||
import com.iformall.common.ResultData; | |||||
import com.iformall.controller.base.BaseController; | |||||
import com.iformall.domain.po.BaseEntity; | |||||
import com.iformall.domain.po.TtMerchantPoi; | |||||
import com.iformall.enums.EnumMeterialType; | |||||
import com.iformall.service.TtMerchantPoiService; | |||||
import com.iformall.service.toutiao.FmTtOpenService; | |||||
import com.iformall.service.toutiao.api.TtOpenMaService; | |||||
import io.swagger.annotations.ApiImplicitParam; | |||||
import io.swagger.annotations.ApiImplicitParams; | |||||
import io.swagger.annotations.ApiOperation; | |||||
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | |||||
import me.chanjar.weixin.common.error.WxErrorException; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.slf4j.Logger; | |||||
import org.slf4j.LoggerFactory; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.web.bind.annotation.*; | |||||
import org.springframework.web.multipart.MultipartFile; | |||||
import javax.imageio.ImageIO; | |||||
import java.awt.image.BufferedImage; | |||||
import java.io.InputStream; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
/** | |||||
* @author gongbiao | |||||
*/ | |||||
@RestController | |||||
@RequestMapping("merchantPoi") | |||||
public class TtMerchantPoiController extends BaseController { | |||||
private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
@Autowired | |||||
private TtMerchantPoiService ttMerchantPoiService; | |||||
@Autowired | |||||
protected FmTtOpenService openService; | |||||
@ApiOperation("分页列表接口") | |||||
@GetMapping("list") | |||||
@ApiImplicitParams({ | |||||
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||||
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) | |||||
public ResultData list(@ModelAttribute TtMerchantPoi record, Integer pageNum, Integer pageSize) { | |||||
logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::list"); | |||||
if (null == record || StringUtils.isBlank(record.getTenantId())){ | |||||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode()); | |||||
} | |||||
record.setSortColumns(BaseEntity.SortField.UpdateDate_DESC); | |||||
final PageInfo<TtMerchantPoi> page = ttMerchantPoiService.listAsPage(record, pageNum, pageSize); | |||||
return new ResultData(page); | |||||
} | |||||
@ApiOperation("根据id查询接口") | |||||
@GetMapping("/findById") | |||||
@ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | |||||
public ResultData findById(Long id) { | |||||
logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::findById"); | |||||
if(id == null){ | |||||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
} | |||||
TtMerchantPoi record = ttMerchantPoiService.getById(id); | |||||
return new ResultData(record); | |||||
} | |||||
/** | |||||
* 代授权小程序上传资源 | |||||
* 1 小程序图标 修改小程序图标接口 小于等于 2MB jpeg、jpg、png 像素为 200 * 200 | |||||
* 2 小程序服务类目资质材料 增加服务类目接口 | |||||
* 补充服务类目资质信息接口 小于等于 2MB jpeg、jpg、png | |||||
* 3 小程序名称审核材料 修改小程序名称接口 小于等于 2MB jpeg、jpg、png | |||||
* 4 小程序落地页截图 申请「短视频挂载」能力接口 小于等于 2MB jpeg、jpg、png | |||||
* 5 场景示例图 申请「获取用户手机号」能力接口 小于等于 5MB jpeg、jpg、png | |||||
* 6 小程序分享模板图片 新增分享模板接口 | |||||
* 修改分享模板接口 小于等于 1MB jpeg、jpg、png 像素为 500 * 400 | |||||
* 7 商铺营业执照、行业资质材料 提交商铺资质材料接口 小于等于 4MB jpeg、jpg、png | |||||
* 8 服务商和商家的合作协议 提交商铺资质材料接口 小于等于 4MB pdf | |||||
* | |||||
* @param multiReq | |||||
* @return | |||||
* @throws Exception | |||||
*/ | |||||
@PostMapping(value = "/upload_material", consumes = "multipart/*", headers = "content-type=multipart/form-data") | |||||
@ApiOperation("上传图片") | |||||
public ResultData awsImgUpload(@RequestParam("file") MultipartFile multiReq | |||||
,@RequestParam Map<String, String> param) { | |||||
logger.info("[" + getIpAddr() + "] TtMerchantPoiController::upload_material"); | |||||
String appId = param.get("appId"); | |||||
if(StringUtils.isBlank(appId)){ | |||||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
} | |||||
String materialTypeStr = param.get("materialType"); | |||||
Integer materialType = null; | |||||
if(StringUtils.isNotBlank(materialTypeStr)){ | |||||
try{ | |||||
materialType = Integer.parseInt(materialTypeStr); | |||||
}catch (Exception e){ } | |||||
} | |||||
if(materialType == null){ | |||||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
} | |||||
EnumMeterialType enumMeterialType = EnumMeterialType.getByCode(materialType); | |||||
if(enumMeterialType == null){ | |||||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); | |||||
} | |||||
long size = multiReq.getSize(); | |||||
final long length = enumMeterialType.getSize(); | |||||
if (size > length) { | |||||
return new ResultData(ErrorCode.PICTURE_SIZE_EXCEED); | |||||
} | |||||
String fileFormat = ""; | |||||
try { | |||||
int dot = multiReq.getOriginalFilename().lastIndexOf('.'); | |||||
if (dot >= 0) { | |||||
fileFormat = multiReq.getOriginalFilename().substring(dot, multiReq.getOriginalFilename().length()); | |||||
} | |||||
TtOpenMaService openMaService = openService.getTtOpenComponentService().getTtMaServiceByAppid(appId); | |||||
String res = openMaService.mediaUpload(materialType, fileFormat, multiReq.getInputStream()); | |||||
return new ResultData(res); | |||||
} catch (Exception e) { | |||||
logger.error("解析图片",e); | |||||
return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR); | |||||
} | |||||
} | |||||
} |