From 41a62803aa0ec99e73d00c6c4e24fb47f865a8cd Mon Sep 17 00:00:00 2001 From: "382696293@qq.com" <382696293@qq.com> Date: Wed, 20 Mar 2024 15:21:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E4=BA=91=E6=8E=A5=E5=8F=A3=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E5=B0=81=E8=A3=85=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/domain/shuyun/ShuYunGroupTag.java | 63 ++++++ .../common/core/domain/shuyun/ShuYunTag.java | 86 +++++++- ...e.java => ShuYunTagCreateCallbackReq.java} | 6 +- .../core/domain/shuyun/ShuYunTagResponse.java | 196 ++++++++++++++++++ .../core/domain/shuyun/ShuYunTagValue.java | 38 ++++ ...Tag.java => ShuYunUserTagCallbackReq.java} | 11 +- .../core/domain/shuyun/ShuYunUserTagReq.java | 139 +++++++++++++ .../service/impl/WxNursingLogServiceImpl.java | 39 +++- .../system/controller/ShuYunController.java | 10 +- .../system/service/IShuYunService.java | 10 +- .../service/impl/ShuYunServiceImpl.java | 10 +- .../system/utils/shuyun/ActionMethod.java | 54 ++--- .../system/utils/shuyun/ShuYunApiUtils.java | 195 ++++++++++++++--- 13 files changed, 762 insertions(+), 95 deletions(-) create mode 100644 flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunGroupTag.java rename flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/{ShuYunTagCreate.java => ShuYunTagCreateCallbackReq.java} (84%) create mode 100644 flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagResponse.java create mode 100644 flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagValue.java rename flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/{ShuYunUserTag.java => ShuYunUserTagCallbackReq.java} (79%) create mode 100644 flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunUserTagReq.java diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunGroupTag.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunGroupTag.java new file mode 100644 index 0000000..93d4de8 --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunGroupTag.java @@ -0,0 +1,63 @@ +package com.flossom.common.core.domain.shuyun; + +import java.util.List; + +public class ShuYunGroupTag { + + /** + * 标签组ID + */ + private Integer groupId; + /** + * 标签组名称 + */ + private String groupName; + /** + * 如果是云标签,表示订阅状态(0:未订阅, 1:已订阅)。如果是自定义标签,默认返回0 + */ + private Integer status; + + private List tagList; + + public ShuYunGroupTag() { + } + + public ShuYunGroupTag(Integer groupId, String groupName, Integer status, List tagList) { + this.groupId = groupId; + this.groupName = groupName; + this.status = status; + this.tagList = tagList; + } + + public Integer getGroupId() { + return groupId; + } + + public void setGroupId(Integer groupId) { + this.groupId = groupId; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public List getTagList() { + return tagList; + } + + public void setTagList(List tagList) { + this.tagList = tagList; + } +} diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTag.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTag.java index 96609da..51a820d 100644 --- a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTag.java +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTag.java @@ -1,7 +1,13 @@ package com.flossom.common.core.domain.shuyun; +import java.util.List; + public class ShuYunTag { + /** + * 标签ID + */ + private Integer tagId; /** * 标签组id */ @@ -42,11 +48,29 @@ public class ShuYunTag { */ private String description; + /** + * 标签值作用域(0:租户级, 1:平台级, 2:店铺级),目前自定义标签和云标签全部为租户级 + */ + private String valueScope; + + /** + * 标签值类型(0:日期, 1:字符输入(单值), 2:字符选择, 3:数值输入, 4:数值选择, 5:字符输入(多值), 6:年龄, 7:孕龄,8:从属型) + */ + private String tagType; + + private List tagValue; + private Integer permission; + private List relatedTagInfo; + + private List childTags; + public ShuYunTag() { } - public ShuYunTag(Integer groupId, String tagName, Integer valueType, Integer optionType, Integer valueNumberOption, Integer validPeriod, Integer validPeriodType, String description) { + + public ShuYunTag(Integer groupId, Integer tagId, String tagName, Integer valueType, Integer optionType, Integer valueNumberOption, Integer validPeriod, Integer validPeriodType, String description) { this.groupId = groupId; + this.tagId = tagId; this.tagName = tagName; this.valueType = valueType; this.optionType = optionType; @@ -56,8 +80,9 @@ public class ShuYunTag { this.description = description; } - public ShuYunTag(Integer groupId, String tagName, Integer valueType, Integer optionType, String optionalValues, Integer valueNumberOption, Integer validPeriod, Integer validPeriodType, String description) { + public ShuYunTag(Integer groupId, Integer tagId, String tagName, Integer valueType, Integer optionType, String optionalValues, Integer valueNumberOption, Integer validPeriod, Integer validPeriodType, String description) { this.groupId = groupId; + this.tagId = tagId; this.tagName = tagName; this.valueType = valueType; this.optionType = optionType; @@ -139,4 +164,61 @@ public class ShuYunTag { public void setDescription(String description) { this.description = description; } + + public Integer getTagId() { + return tagId; + } + + public void setTagId(Integer tagId) { + this.tagId = tagId; + } + + public String getValueScope() { + return valueScope; + } + + public void setValueScope(String valueScope) { + this.valueScope = valueScope; + } + + public String getTagType() { + return tagType; + } + + public void setTagType(String tagType) { + this.tagType = tagType; + } + + public List getTagValue() { + return tagValue; + } + + public void setTagValue(List tagValue) { + this.tagValue = tagValue; + } + + public Integer getPermission() { + return permission; + } + + public void setPermission(Integer permission) { + this.permission = permission; + } + + public List getRelatedTagInfo() { + return relatedTagInfo; + } + + public void setRelatedTagInfo(List relatedTagInfo) { + this.relatedTagInfo = relatedTagInfo; + } + + public List getChildTags() { + return childTags; + } + + public void setChildTags(List childTags) { + this.childTags = childTags; + } + } diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagCreate.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagCreateCallbackReq.java similarity index 84% rename from flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagCreate.java rename to flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagCreateCallbackReq.java index 46e25e4..6a1bdea 100644 --- a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagCreate.java +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagCreateCallbackReq.java @@ -7,7 +7,7 @@ import java.util.Date; /** * 数云传输外部标签实体 */ -public class ShuYunTagCreate { +public class ShuYunTagCreateCallbackReq { /** * 外部标签ID @@ -24,10 +24,10 @@ public class ShuYunTagCreate { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date addTime; - public ShuYunTagCreate() { + public ShuYunTagCreateCallbackReq() { } - public ShuYunTagCreate(String tagId, String tagName, Date addTime) { + public ShuYunTagCreateCallbackReq(String tagId, String tagName, Date addTime) { this.tagId = tagId; this.tagName = tagName; this.addTime = addTime; diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagResponse.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagResponse.java new file mode 100644 index 0000000..f3fbd81 --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagResponse.java @@ -0,0 +1,196 @@ +package com.flossom.common.core.domain.shuyun; + +import java.util.List; + +public class ShuYunTagResponse { + + /** + * 标签ID + */ + private Integer tagId; + /** + * 标签名称,不能重复创建。 + */ + private String tagName; + /** + * 标签类型(0:云标签, 1:自定义标签) + */ + private String tagType; + /** + * 0:日期, 1:字符输入(单值), 2:字符选择, 3:数值输入, 4:数值选择, 5:字符输入(多值), 6:年龄, 7:孕龄,8:从属型 + */ + private Integer valueType; + /** + * 如果标签值类型为3:数值输入型或4:数值选择型, 代表("0":"整数","1":"小数"), + * 如果标签值类型为0:日期型,代表(0:年/月/日, 1:年/月) + */ + private Integer optionType; + /** + * 可打标签值个数(0:单选,1:多选, null:没有单选多选),只有在标签值类型为2:字符选择型或者4:数值选择型时才会返回该字段 + */ + private Integer valueNumberOption; + /** + * 标签值有效期,-1表示永久有效 + * 标签值有效期,如果有有效期,为固定的一个整数。跟validPeriodType字段组合使用,表示多少天,多少月,多少年 + */ + private Integer validPeriod; + /** + * 标签值有效期类型(0:天, 1:月, 2:年,-1:永久有效) + */ + private Integer validPeriodType; + private List displayTagValue; + private String markTime; + + /** + * 打标值数组 + */ + private List tagValue; + + /** + * 从属标签 + */ + private List childTags; + + public class childTag { + private String instanceName; + private List tags; + + public childTag() { + } + + public childTag(String instanceName, List tags) { + this.instanceName = instanceName; + this.tags = tags; + } + + public String getInstanceName() { + return instanceName; + } + + public void setInstanceName(String instanceName) { + this.instanceName = instanceName; + } + + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } + } + + public ShuYunTagResponse() { + } + + public ShuYunTagResponse(Integer tagId, String tagName, String tagType, Integer valueType, Integer optionType, Integer valueNumberOption, Integer validPeriod, Integer validPeriodType, List displayTagValue, String markTime, List tagValue, List childTags) { + this.tagId = tagId; + this.tagName = tagName; + this.tagType = tagType; + this.valueType = valueType; + this.optionType = optionType; + this.valueNumberOption = valueNumberOption; + this.validPeriod = validPeriod; + this.validPeriodType = validPeriodType; + this.displayTagValue = displayTagValue; + this.markTime = markTime; + this.tagValue = tagValue; + this.childTags = childTags; + } + + public Integer getTagId() { + return tagId; + } + + public void setTagId(Integer tagId) { + this.tagId = tagId; + } + + public String getTagName() { + return tagName; + } + + public void setTagName(String tagName) { + this.tagName = tagName; + } + + public String getTagType() { + return tagType; + } + + public void setTagType(String tagType) { + this.tagType = tagType; + } + + public Integer getValueType() { + return valueType; + } + + public void setValueType(Integer valueType) { + this.valueType = valueType; + } + + public Integer getOptionType() { + return optionType; + } + + public void setOptionType(Integer optionType) { + this.optionType = optionType; + } + + public Integer getValueNumberOption() { + return valueNumberOption; + } + + public void setValueNumberOption(Integer valueNumberOption) { + this.valueNumberOption = valueNumberOption; + } + + public Integer getValidPeriod() { + return validPeriod; + } + + public void setValidPeriod(Integer validPeriod) { + this.validPeriod = validPeriod; + } + + public Integer getValidPeriodType() { + return validPeriodType; + } + + public void setValidPeriodType(Integer validPeriodType) { + this.validPeriodType = validPeriodType; + } + + public List getDisplayTagValue() { + return displayTagValue; + } + + public void setDisplayTagValue(List displayTagValue) { + this.displayTagValue = displayTagValue; + } + + public String getMarkTime() { + return markTime; + } + + public void setMarkTime(String markTime) { + this.markTime = markTime; + } + + public List getTagValue() { + return tagValue; + } + + public void setTagValue(List tagValue) { + this.tagValue = tagValue; + } + + public List getChildTags() { + return childTags; + } + + public void setChildTags(List childTags) { + this.childTags = childTags; + } +} diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagValue.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagValue.java new file mode 100644 index 0000000..0b9075c --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunTagValue.java @@ -0,0 +1,38 @@ +package com.flossom.common.core.domain.shuyun; + +public class ShuYunTagValue { + + /** + * 标签值ID + */ + private Integer itemId; + + /** + * 标签值内容 + */ + private String itemVal; + + public ShuYunTagValue() { + } + + public ShuYunTagValue(Integer itemId, String itemVal) { + this.itemId = itemId; + this.itemVal = itemVal; + } + + public Integer getItemId() { + return itemId; + } + + public void setItemId(Integer itemId) { + this.itemId = itemId; + } + + public String getItemVal() { + return itemVal; + } + + public void setItemVal(String itemVal) { + this.itemVal = itemVal; + } +} diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunUserTag.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunUserTagCallbackReq.java similarity index 79% rename from flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunUserTag.java rename to flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunUserTagCallbackReq.java index ceefd35..9d55bbd 100644 --- a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunUserTag.java +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunUserTagCallbackReq.java @@ -4,22 +4,25 @@ import javax.validation.constraints.NotBlank; import java.util.Date; /** - * 数云标记用户标签 + * 数云请求标记用户标签 */ -public class ShuYunUserTag { +public class ShuYunUserTagCallbackReq { @NotBlank(message = "外部标签ID不能为空") private String tagId; + /** + * unionId + */ @NotBlank(message = "会员信息不能为空") private String platAccount; private Date addTime; - public ShuYunUserTag() { + public ShuYunUserTagCallbackReq() { } - public ShuYunUserTag(String tagId, String platAccount, Date addTime) { + public ShuYunUserTagCallbackReq(String tagId, String platAccount, Date addTime) { this.tagId = tagId; this.platAccount = platAccount; this.addTime = addTime; diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunUserTagReq.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunUserTagReq.java new file mode 100644 index 0000000..0111244 --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunUserTagReq.java @@ -0,0 +1,139 @@ +package com.flossom.common.core.domain.shuyun; + +import javax.validation.constraints.NotBlank; +import java.util.Date; +import java.util.List; + +/** + * 小程序标记用户标签,传输到数云 + */ +public class ShuYunUserTagReq { + /** + * 平台CODE + */ + private String platCode; + /** + * 店铺ID + */ + private String shopId; + /** + * 平台账号,unionId + */ + private String platAccount; + /** + * 已创建标签的标签ID + */ + private Integer tagId; + /** + * 字符输入型:单个元素的字符串数组。数字输入型:单个元素的数字数组,数字是整数和小数需符合标签创建时的定义。字符选择型/数字选择型:输入值需为标签创建时的枚举值。日期型:日期类型(0:年/月/日, 1:年/月),需符合标签创建时的定义。 + */ + private List tagValue; + + /** + * 打标值数组 + */ + private List> tagsMark; + + /** + * 打标场景,默认填写OUTER_SYSTEM,也可以不填。 + */ + private String markScene; + /** + * 父标签ID,从属型子标签打标必须传入 + */ + private Integer parentTagId; + /** + * 实例名称,从属型子标签打标必须传入 + */ + private String instanceName; + + public ShuYunUserTagReq() { + } + + public ShuYunUserTagReq(String platCode, String shopId, String platAccount, Integer tagId, List tagValue) { + this.platCode = platCode; + this.shopId = shopId; + this.platAccount = platAccount; + this.tagId = tagId; + this.tagValue = tagValue; + } + + public ShuYunUserTagReq(String platCode, String shopId, String platAccount, List> tagsMark) { + this.platCode = platCode; + this.shopId = shopId; + this.platAccount = platAccount; + this.tagsMark = tagsMark; + } + + public String getPlatCode() { + return platCode; + } + + public void setPlatCode(String platCode) { + this.platCode = platCode; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getPlatAccount() { + return platAccount; + } + + public void setPlatAccount(String platAccount) { + this.platAccount = platAccount; + } + + public Integer getTagId() { + return tagId; + } + + public void setTagId(Integer tagId) { + this.tagId = tagId; + } + + public List getTagValue() { + return tagValue; + } + + public void setTagValue(List tagValue) { + this.tagValue = tagValue; + } + + public String getMarkScene() { + return markScene; + } + + public void setMarkScene(String markScene) { + this.markScene = markScene; + } + + public Integer getParentTagId() { + return parentTagId; + } + + public void setParentTagId(Integer parentTagId) { + this.parentTagId = parentTagId; + } + + public String getInstanceName() { + return instanceName; + } + + public void setInstanceName(String instanceName) { + this.instanceName = instanceName; + } + + public List> getTagsMark() { + return tagsMark; + } + + public void setTagsMark(List> tagsMark) { + this.tagsMark = tagsMark; + } +} diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxNursingLogServiceImpl.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxNursingLogServiceImpl.java index 922710f..4c99c77 100644 --- a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxNursingLogServiceImpl.java +++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxNursingLogServiceImpl.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import com.alibaba.fastjson2.JSONObject; import com.flossom.common.core.domain.entity.*; import com.flossom.common.core.domain.req.WxNursingLogReq; import com.flossom.common.core.domain.ret.WxNursingStatisticsRet; @@ -20,6 +21,8 @@ import com.flossom.common.core.utils.StringUtils; import com.flossom.common.security.utils.DictUtils; import com.flossom.common.security.utils.SecurityUtils; import com.flossom.miniProgram.service.IWxNursingLogService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -33,6 +36,8 @@ import org.springframework.stereotype.Service; @Service public class WxNursingLogServiceImpl implements IWxNursingLogService { + protected final static Logger logger = LoggerFactory.getLogger(WxNursingLogServiceImpl.class); + @Autowired private WxNursingLogMapper wxNursingLogMapper; @@ -82,7 +87,7 @@ public class WxNursingLogServiceImpl implements IWxNursingLogService { if (instrumentId != null) { wxNursingLog.setInstrumentId(instrumentId); } - if(queryDate != null) { + if (queryDate != null) { wxNursingLog.getParams().put("endTime", queryDate); } wxNursingLog.setUserId(SecurityUtils.getLoginUser().getWxUserMember().getId()); @@ -160,6 +165,38 @@ public class WxNursingLogServiceImpl implements IWxNursingLogService { } } } + /** + * 区别点:FR200 能量图谱需要累加,超过丢弃,水分测试直接最新的一条 + */ + if (StringUtils.equals(wxInstrument.getModel(), "FR200")) { + WxMode wxMode = wxModeMapper.selectWxModeById(wxNursingLogReq.getModeId()); + if (wxMode == null) { + logger.error("模式ID:{} 查询数据为空", wxNursingLogReq.getModeId()); + throw new ServiceException("请求数据有误"); + } + String modeType = wxMode.getModeType(); + // 水分测试 + if (StringUtils.equals(modeType, "moistureTest")) { + updateNursingLog.setNursingData(wxNursingLogReq.getNursingData()); + } + // 能量图谱 + if (StringUtils.equals(modeType, "face") || StringUtils.equals(modeType, "eyes") + || StringUtils.equals(modeType, "nasolabialFold") || StringUtils.equals(modeType, "mandibularLine") + || StringUtils.equals(modeType, "headLiftingPro")) { + String nursingData = wxNursingLog.getNursingData(); + if (StringUtils.isBlank(nursingData)) { + updateNursingLog.setNursingData(wxNursingLogReq.getNursingData()); + } else { + JSONObject nursingDatajsonObject = JSONObject.parseObject(nursingData); + Object o = (Object[])nursingDatajsonObject.get("GearData"); + if (nursingDatajsonObject.get("GearData") != null) { + + + } + } + } + } + updateNursingLog.setId(wxNursingLog.getId()); updateNursingLog.setUpdateBy(SecurityUtils.getLoginUser().getWxUserMember().getNickname()); updateNursingLog.setUpdateTime(DateUtils.getNowDate()); diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/ShuYunController.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/ShuYunController.java index e328adc..52e09e2 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/ShuYunController.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/ShuYunController.java @@ -4,8 +4,8 @@ import com.alibaba.fastjson.JSON; import com.flossom.common.core.constant.CacheConstants; import com.flossom.common.core.domain.R; import com.flossom.common.core.domain.shuyun.AccessToken; -import com.flossom.common.core.domain.shuyun.ShuYunTagCreate; -import com.flossom.common.core.domain.shuyun.ShuYunUserTag; +import com.flossom.common.core.domain.shuyun.ShuYunTagCreateCallbackReq; +import com.flossom.common.core.domain.shuyun.ShuYunUserTagCallbackReq; import com.flossom.common.redis.service.RedisService; import com.flossom.system.service.IShuYunService; import com.flossom.system.utils.shuyun.ShuYunConfig; @@ -69,21 +69,21 @@ public class ShuYunController { } @PostMapping(value = "/tagCreate") - public R tagCreate(@RequestBody ShuYunTagCreate shuYunTagCreate) { + public R tagCreate(@RequestBody ShuYunTagCreateCallbackReq shuYunTagCreate) { logger.info("数云新增标签: {}", JSON.toJSONString(shuYunTagCreate)); shuYunService.tagCreate(shuYunTagCreate); return R.ok(); } @PostMapping(value = "markUserTag/") - public R markUserTag(@RequestBody ShuYunUserTag shuYunUserTag) { + public R markUserTag(@RequestBody ShuYunUserTagCallbackReq shuYunUserTag) { logger.info("数云标记用户标签: {}", JSON.toJSONString(shuYunUserTag)); shuYunService.markUserTag(shuYunUserTag); return R.ok(); } @PostMapping(value = "delUserTag/") - public R delUserTag(@RequestBody ShuYunUserTag shuYunUserTag) { + public R delUserTag(@RequestBody ShuYunUserTagCallbackReq shuYunUserTag) { logger.info("数云删除用户标签: {}", JSON.toJSONString(shuYunUserTag)); shuYunService.delUserTag(shuYunUserTag); return R.ok(); diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IShuYunService.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IShuYunService.java index 156f9bc..85def76 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IShuYunService.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IShuYunService.java @@ -1,12 +1,12 @@ package com.flossom.system.service; -import com.flossom.common.core.domain.shuyun.ShuYunTagCreate; -import com.flossom.common.core.domain.shuyun.ShuYunUserTag; +import com.flossom.common.core.domain.shuyun.ShuYunTagCreateCallbackReq; +import com.flossom.common.core.domain.shuyun.ShuYunUserTagCallbackReq; public interface IShuYunService { - void tagCreate(ShuYunTagCreate shuYunTagCreate); + void tagCreate(ShuYunTagCreateCallbackReq shuYunTagCreate); - void markUserTag(ShuYunUserTag shuYunUserTag); + void markUserTag(ShuYunUserTagCallbackReq shuYunUserTag); - void delUserTag(ShuYunUserTag shuYunUserTag); + void delUserTag(ShuYunUserTagCallbackReq shuYunUserTag); } diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/ShuYunServiceImpl.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/ShuYunServiceImpl.java index 9649a29..f0605f6 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/ShuYunServiceImpl.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/ShuYunServiceImpl.java @@ -2,8 +2,8 @@ package com.flossom.system.service.impl; import com.flossom.common.core.domain.entity.SysTag; import com.flossom.common.core.domain.entity.WxUserMember; -import com.flossom.common.core.domain.shuyun.ShuYunTagCreate; -import com.flossom.common.core.domain.shuyun.ShuYunUserTag; +import com.flossom.common.core.domain.shuyun.ShuYunTagCreateCallbackReq; +import com.flossom.common.core.domain.shuyun.ShuYunUserTagCallbackReq; import com.flossom.common.core.enums.Status; import com.flossom.common.core.exception.ServiceException; import com.flossom.common.core.mapper.SysTagMapper; @@ -33,7 +33,7 @@ public class ShuYunServiceImpl implements IShuYunService { private IWxUserMemberService wxUserMemberService; @Override - public void tagCreate(ShuYunTagCreate shuYunTagCreate) { + public void tagCreate(ShuYunTagCreateCallbackReq shuYunTagCreate) { SysTag sysTag = new SysTag(); sysTag.setTagName(shuYunTagCreate.getTagName()); SysTag parentTag = sysTagMapper.selectDeptById(1L); @@ -54,7 +54,7 @@ public class ShuYunServiceImpl implements IShuYunService { } @Override - public void markUserTag(ShuYunUserTag shuYunUserTag) { + public void markUserTag(ShuYunUserTagCallbackReq shuYunUserTag) { // 查询会员信息 WxUserMember wxUserMember = wxUserMemberMapper.selectUserMemberByUnionId(shuYunUserTag.getPlatAccount()); if (wxUserMember == null) { @@ -71,7 +71,7 @@ public class ShuYunServiceImpl implements IShuYunService { } @Override - public void delUserTag(ShuYunUserTag shuYunUserTag) { + public void delUserTag(ShuYunUserTagCallbackReq shuYunUserTag) { // 查询会员信息 WxUserMember wxUserMember = wxUserMemberMapper.selectUserMemberByUnionId(shuYunUserTag.getPlatAccount()); if (wxUserMember == null) { diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/utils/shuyun/ActionMethod.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/utils/shuyun/ActionMethod.java index ff85e93..9b39c82 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/utils/shuyun/ActionMethod.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/utils/shuyun/ActionMethod.java @@ -70,23 +70,15 @@ public class ActionMethod { /** * 给会员标记标签 */ - private String markUserTagCreate; - /** - * 批量给会员标记标签 - */ - private String batchMarkUserTagCreate; + private String markUserTag; /** * 删除用户标签 */ - private String markUserTagDelete; - /** - * 批量删除用户标签 - */ - private String batchMarkUserTagDelete; + private String deleteUserTag; /** * 查询用户标签 */ - private String markUserTagSearch; + private String searchUserTag; public String getAccessToken() { return accessToken; @@ -192,43 +184,27 @@ public class ActionMethod { this.tagUpdate = tagUpdate; } - public String getMarkUserTagCreate() { - return markUserTagCreate; - } - - public void setMarkUserTagCreate(String markUserTagCreate) { - this.markUserTagCreate = markUserTagCreate; - } - - public String getBatchMarkUserTagCreate() { - return batchMarkUserTagCreate; - } - - public void setBatchMarkUserTagCreate(String batchMarkUserTagCreate) { - this.batchMarkUserTagCreate = batchMarkUserTagCreate; - } - - public String getMarkUserTagDelete() { - return markUserTagDelete; + public String getMarkUserTag() { + return markUserTag; } - public void setMarkUserTagDelete(String markUserTagDelete) { - this.markUserTagDelete = markUserTagDelete; + public void setMarkUserTag(String markUserTag) { + this.markUserTag = markUserTag; } - public String getBatchMarkUserTagDelete() { - return batchMarkUserTagDelete; + public String getDeleteUserTag() { + return deleteUserTag; } - public void setBatchMarkUserTagDelete(String batchMarkUserTagDelete) { - this.batchMarkUserTagDelete = batchMarkUserTagDelete; + public void setDeleteUserTag(String deleteUserTag) { + this.deleteUserTag = deleteUserTag; } - public String getMarkUserTagSearch() { - return markUserTagSearch; + public String getSearchUserTag() { + return searchUserTag; } - public void setMarkUserTagSearch(String markUserTagSearch) { - this.markUserTagSearch = markUserTagSearch; + public void setSearchUserTag(String searchUserTag) { + this.searchUserTag = searchUserTag; } } diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/utils/shuyun/ShuYunApiUtils.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/utils/shuyun/ShuYunApiUtils.java index 14b36c1..3bcf03f 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/utils/shuyun/ShuYunApiUtils.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/utils/shuyun/ShuYunApiUtils.java @@ -1,7 +1,9 @@ package com.flossom.system.utils.shuyun; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.map.MapUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.flossom.common.core.constant.CacheConstants; import com.flossom.common.core.domain.R; @@ -19,6 +21,7 @@ import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.ZoneId; +import java.util.List; import java.util.Map; @@ -57,22 +60,23 @@ public class ShuYunApiUtils { public static final int SUCCESS = 10000; /** - * 请求成功,但是结果不符合预期 + * 请求成功,但是业务处理错误,或者执行结果不符合预期 + * 但不是处理异常 */ public static final int HALF_SUCCESS = 14000; } /** - * 获取 accessToken,缓存没有就请求数云回调接口,将 accessToken 传递过来 + * 获取 accessToken,缓存没有就请求数云回调接口,通过异步回调将 accessToken 传递过来 */ public static String getAccessToken() { Long expiryTime = redisService.getCacheMapValue(CacheConstants.SHUYUN_ACCESS_TOKEN_CACHE, CacheConstants.SHUYUN_ACCESS_TOKEN_CACHE_EXPIRY); if (expiryTime == null || expiryTime == 0 || LocalDateTime.now().atZone(ZoneId.systemDefault()).toEpochSecond() > expiryTime) { String accessTokenUrl = StringUtils.replace(shuYunConfig.getActionMethod().getAccessToken(), "{appid}", shuYunConfig.getAppid()); - logger.info("刷新accessToken地址:{}", accessTokenUrl); + logger.info("刷新 accessToken 地址:{}", accessTokenUrl); try { String result = HttpClientUtils.get(accessTokenUrl); - logger.info("请求数云接口获取accessToken结果:{}", result); + logger.info("请求数云接口获取 accessToken 结果:{}", result); R r = JSON.parseObject(result, R.class); if (r.getCode() != R.SUCCESS) { logger.error("请求数云接口获取accessToken失败,将直接使用旧的accessToken,失败原因:{}", result); @@ -87,31 +91,27 @@ public class ShuYunApiUtils { return accessToken.getAccessToken(); } /** - * 第一次获取会失败,因为回调是异步的,如果还没回调回来,我们就从redis获取缓存了 + * 第一次获取会失败,因为回调是异步的,如果还没回调回来,我们就从 redis 获取缓存了 */ - logger.error("从redis获取数云accessToken失败,缓存中没有accessToken,有可能是第一次调用"); - throw new ServiceException("从redis获取数云accessToken失败,缓存中没有accessToken,有可能是第一次调用"); + logger.error("从 redis 获取数云 accessToken 失败,缓存中没有 accessToken,有可能是第一次调用"); + throw new ServiceException("从 redis 获取数云 accessToken 失败,缓存中没有 accessToken,有可能是第一次调用"); } /** * 请求基础封装方法 * - * @param httpMethod 请求方式 - * @param requestParams get请求时,url地址后的参数 - * @param requestBody post、put 请求时,请求体的数据 - * @param actionMethod 请求方法地址 + * @param httpMethod 请求方式 + * @param queryParams get请求时,url地址后的参数 + * @param bodyParams post、put 请求时,请求体的数据 + * @param actionMethod 请求方法地址 */ - public static R shuYunHttpRequest(HttpMethod httpMethod, Map requestParams, String requestBody, String actionMethod) throws ServiceException { - logger.info("数云接口请求地址:{},参数:requestParams = {}、requestBody = {}", actionMethod, requestParams, requestBody); + public static R shuYunHttpRequest(HttpMethod httpMethod, Map queryParams, Object bodyParams, String actionMethod) throws ServiceException { + logger.info("数云接口请求地址:{},参数:queryParams = {}、bodyParams = {}", actionMethod, queryParams, JSON.toJSONString(bodyParams)); String result = GateWayClient.askGateWay( - httpMethod, - shuYunConfig.getUrl(), - requestParams, - requestBody, - shuYunConfig.getAppid(), - shuYunConfig.getSecurity(), - getAccessToken(), - actionMethod); + httpMethod, shuYunConfig.getUrl(), + queryParams, JSON.toJSONString(bodyParams), + shuYunConfig.getAppid(), shuYunConfig.getSecurity(), + getAccessToken(), actionMethod); logger.info("返回响应:{}", result); R r = JSON.parseObject(result, R.class); if (r.getCode() == ShuYunHttpStatusConstants.SUCCESS || r.getCode() == ShuYunHttpStatusConstants.HALF_SUCCESS) { @@ -122,13 +122,21 @@ public class ShuYunApiUtils { } } + public static R shuYunHttpRequest(HttpMethod httpMethod, Map queryParams, String actionMethod) throws ServiceException { + return shuYunHttpRequest(httpMethod, queryParams, null, actionMethod); + } + + public static R shuYunHttpRequest(HttpMethod httpMethod, String bodyParams, String actionMethod) throws ServiceException { + return shuYunHttpRequest(httpMethod, null, bodyParams, actionMethod); + } + /** * 会员注册 */ public static void registerMember(ShuYunMember member) { try { - shuYunHttpRequest(HttpMethod.POST, null, JSON.toJSONString(member), + shuYunHttpRequest(HttpMethod.POST, null, member, shuYunConfig.getActionMethod().getRegisterMember()); } catch (Exception e) { logger.error("请求数云接口注册会员失败:{}", e.getMessage()); @@ -141,7 +149,7 @@ public class ShuYunApiUtils { */ public static ShuYunMember queryMember(ShuYunMember member) { try { - R r = shuYunHttpRequest(HttpMethod.POST, null, JSON.toJSONString(member), + R r = shuYunHttpRequest(HttpMethod.POST, null, member, shuYunConfig.getActionMethod().getQueryMember()); if (r.getCode() == ShuYunHttpStatusConstants.SUCCESS) { return JSON.parseObject(r.getData().toString(), ShuYunMember.class); @@ -163,7 +171,7 @@ public class ShuYunApiUtils { */ public static void modifyMember(ShuYunMember member) { try { - shuYunHttpRequest(HttpMethod.PUT, null, JSON.toJSONString(member), + shuYunHttpRequest(HttpMethod.PUT, null, member, shuYunConfig.getActionMethod().getModifyMember()); } catch (Exception e) { logger.error("请求数云接口-修改会员信息(除手机号)失败:{}", e.getMessage()); @@ -176,7 +184,7 @@ public class ShuYunApiUtils { */ public static void modifyMemberMobile(ShuYunMember member) { try { - shuYunHttpRequest(HttpMethod.PUT, null, JSON.toJSONString(member), + shuYunHttpRequest(HttpMethod.PUT, null, member, shuYunConfig.getActionMethod().getModifyMemberMobile()); } catch (Exception e) { logger.error("请求数云接口-修改会员手机号失败:{}", e.getMessage()); @@ -189,7 +197,7 @@ public class ShuYunApiUtils { */ public static void unbindMember(ShuYunMember member) { try { - shuYunHttpRequest(HttpMethod.POST, null, JSON.toJSONString(member), + shuYunHttpRequest(HttpMethod.POST, null, member, shuYunConfig.getActionMethod().getUnbindMember()); } catch (Exception e) { logger.error("请求数云接口-解绑会员失败:{}", e.getMessage()); @@ -202,7 +210,7 @@ public class ShuYunApiUtils { */ public static void pointChange(ShuYunPointChange shuYunPointChange) { try { - shuYunHttpRequest(HttpMethod.POST, null, JSON.toJSONString(shuYunPointChange), + shuYunHttpRequest(HttpMethod.POST, null, shuYunPointChange, shuYunConfig.getActionMethod().getPointChange()); } catch (Exception e) { logger.error("请求数云接口-会员积分变更失败:{}", e.getMessage()); @@ -225,7 +233,8 @@ public class ShuYunApiUtils { if (r.getCode() != ShuYunHttpStatusConstants.SUCCESS) { logger.error("请求数云接口-会员积分变更记录查询失败:{}", r.getMsg()); } - return JSON.parseObject(r.getData().toString(), new TypeReference>(){}); + return JSON.parseObject(r.getData().toString(), new TypeReference>() { + }); } catch (Exception e) { logger.error("请求数云接口-会员积分变更记录查询失败:{}", e.getMessage()); throw new ServiceException("请求数云接口-会员积分变更记录查询失败"); @@ -257,21 +266,35 @@ public class ShuYunApiUtils { /** * 创建标签 */ - public static void tagCreate(ShuYunTag shuYunTag) { + public static String tagCreate(ShuYunTag shuYunTag) { try { - R r = shuYunHttpRequest(HttpMethod.POST, null, JSON.toJSONString(shuYunTag), + R r = shuYunHttpRequest(HttpMethod.POST, null, shuYunTag, shuYunConfig.getActionMethod().getTagCreate()); if (r.getCode() == ShuYunHttpStatusConstants.HALF_SUCCESS) { logger.error("请求数云接口-创建标签失败:{}", r.getMsg()); throw new ServiceException("请求数云接口-创建标签失败"); } + if (r.getData() != null) { + JSONObject map = (JSONObject) r.getData(); + return String.valueOf(map.get("tagId")); + } + return null; } catch (Exception e) { logger.error("请求数云接口-创建标签失败:{}", e.getMessage()); throw new ServiceException("请求数云接口-创建标签失败"); } } - public static void tagSearch(Map params) { + /** + * 查询标签 + * + * @param type 标签类型:1(自定义) + * @param allValueType 标签显示:true(全部标签);false(基本标签) + */ + public static List tagSearch(String type, String allValueType) { + Map params = MapUtil.newHashMap(); + params.put("type", type); + params.put("allValueType", allValueType); try { R r = shuYunHttpRequest(HttpMethod.GET, params, null, shuYunConfig.getActionMethod().getTagSearch()); @@ -279,11 +302,121 @@ public class ShuYunApiUtils { logger.error("请求数云接口-创建标签失败:{}", r.getMsg()); throw new ServiceException("请求数云接口-创建标签失败"); } + return JSON.parseObject(r.getData().toString(), new TypeReference>() { + }); } catch (Exception e) { logger.error("请求数云接口-创建标签失败:{}", e.getMessage()); throw new ServiceException("请求数云接口-创建标签失败"); } } + /** + * 删除标签 + */ + public static void tagDelete(String tagId) { + Map params = MapUtil.newHashMap(); + params.put("tagId", tagId); + try { + R r = shuYunHttpRequest(HttpMethod.DELETE, null, params, + shuYunConfig.getActionMethod().getTagDelete()); + if (r.getCode() == ShuYunHttpStatusConstants.HALF_SUCCESS) { + logger.error("请求数云接口-删除标签失败:{}", r.getMsg()); + throw new ServiceException("请求数云接口-删除标签失败"); + } + } catch (Exception e) { + logger.error("请求数云接口-删除标签失败:{}", e.getMessage()); + throw new ServiceException("请求数云接口-删除标签失败"); + } + } + + /** + * 修改标签 + */ + public static void tagUpdate(ShuYunTag shuYunTag) { + try { + R r = shuYunHttpRequest(HttpMethod.PUT, null, shuYunTag, + shuYunConfig.getActionMethod().getTagUpdate()); + if (r.getCode() == ShuYunHttpStatusConstants.HALF_SUCCESS) { + logger.error("请求数云接口-修改标签失败:{}", r.getMsg()); + throw new ServiceException("请求数云接口-修改标签失败"); + } + } catch (Exception e) { + logger.error("请求数云接口-修改标签失败:{}", e.getMessage()); + throw new ServiceException("请求数云接口-修改标签失败"); + } + } + + /** + * 给客户打上单个标签 + */ + public static void markUserTag(ShuYunUserTagReq shuYunUserTagReq) { + try { + R r = shuYunHttpRequest(HttpMethod.POST, null, shuYunUserTagReq, + shuYunConfig.getActionMethod().getMarkUserTag()); + if (r.getCode() == ShuYunHttpStatusConstants.HALF_SUCCESS) { + logger.error("请求数云接口-给客户打上单个标签失败:{}", r.getMsg()); + throw new ServiceException("请求数云接口-给客户打上单个标签失败"); + } + } catch (Exception e) { + logger.error("请求数云接口-给客户打上单个标签失败:{}", e.getMessage()); + throw new ServiceException("请求数云接口-给客户打上单个标签失败"); + } + } + + /** + * 查询客户已经被打上的标签 + */ + public static List searchUserTag(String tagType, String platCode, String shopId, String platAccount, String allValueType) { + Map params = MapUtil.newHashMap(); + // 标签类型:0:云标签, 1:自定义标签 + params.put("tagType", tagType); + // 平台代码 + params.put("platCode", platCode); + // 店铺ID(数云内部店铺ID) + params.put("shopId", shopId); + // 平台账号 + params.put("platAccount", platAccount); + // 标签显示:true(全部标签);false(基本标签) + params.put("allValueType", allValueType); + try { + R r = shuYunHttpRequest(HttpMethod.GET, params, null, + shuYunConfig.getActionMethod().getSearchUserTag()); + if (r.getCode() == ShuYunHttpStatusConstants.HALF_SUCCESS) { + logger.error("请求数云接口-查询客户已经被打上的标签失败:{}", r.getMsg()); + throw new ServiceException("请求数云接口-查询客户已经被打上的标签标签失败"); + } + return JSON.parseObject(r.getData().toString(), new TypeReference>() { + }); + } catch (Exception e) { + logger.error("请求数云接口-查询客户已经被打上的标签失败:{}", e.getMessage()); + throw new ServiceException("请求数云接口-查询客户已经被打上的标签失败"); + } + } + + /** + * 删除客户已经被打上的标签 + */ + public static void deleteUserTag(String platCode, String shopId, String platAccount, Integer tagId) { + Map params = MapUtil.newHashMap(); + // 平台代码 + params.put("platCode", platCode); + // 店铺ID(数云内部店铺ID) + params.put("shopId", shopId); + // 平台账号 + params.put("platAccount", platAccount); + // 标签ID + params.put("tagId", tagId); + try { + R r = shuYunHttpRequest(HttpMethod.DELETE, null, params, + shuYunConfig.getActionMethod().getDeleteUserTag()); + if (r.getCode() == ShuYunHttpStatusConstants.HALF_SUCCESS) { + logger.error("请求数云接口-删除客户已经被打上的标签失败:{}", r.getMsg()); + throw new ServiceException("请求数云接口-删除客户已经被打上的标签失败"); + } + } catch (Exception e) { + logger.error("请求数云接口-删除客户已经被打上的标签失败:{}", e.getMessage()); + throw new ServiceException("请求数云接口-删除客户已经被打上的标签失败"); + } + } }