Commit 12e0286b by xiongjiangtao

Merge branch 'master' into 202406_chat_data

parents b988b13e 7377271d
......@@ -107,10 +107,10 @@ public class HoloDataSource implements InitializingBean, DisposableBean {
}
private Pair<String, String> getHoloAuth() {
//{"appId":"ops_key","cluster":"default","namespaceName":"application","configurations":{"aliyun-key":"{\n\"LTAI5tGn2YicKmgcyTiJDV59\":\"iOp7cICESPZIvIjJRtTmLnCd4gT1Qy\"\n}"},"releaseKey":"20240412153514-b260f04ffbe11f4e"}
String result = HttpUtil.get("http://proapollo.gicdev.com:7080/configs/ops_key/default/application?key=aliyun-key",10000);
//{"appId":"ops_key","cluster":"default","namespaceName":"key_config","configurations":{"demo_aliyun_key":"{\n \"LTAI5tMF2pZGShdULEYbyntc\": \"pC16FjCeklpXg18duNhJsEF91FvxpE\"\n}"},"releaseKey":"20240604165817-7632f04ffbe11f53"}
String result = HttpUtil.get("http://10.0.100.2:7080/configs/ops_key/default/key_config",10000);
JSON json = JSONUtil.parse(result);
String authInfo = json.getByPath("configurations.aliyun-key", String.class);
String authInfo = json.getByPath("configurations.demo_aliyun_key", String.class);
JSON authJson = JSONUtil.parseObj(authInfo);
Map<String, String> map = authJson.toBean(new TypeReference<Map<String, String>>() {});
for (Map.Entry<String, String> entry : map.entrySet()) {
......
......@@ -99,14 +99,32 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
public List<StaffClerkRelationDTO> listBindCodeByStaffId(List<String> enterpriseIdList, String staffId) {
return this.filterDelClerkList(mapper.listBindCodeByStaffId(enterpriseIdList, staffId));
}
private String changeExistClerk(String wxEnterpriseId , String staffId , String newClerkId) {
if(StringUtils.isBlank(newClerkId)) {
return newClerkId ;
}
ClerkDTO clerkDTO = this.clerkService.getclerkById(newClerkId) ;
String storeId = clerkDTO.getStoreId() ;
List<StaffClerkRelationDTO> relationList = this.listByStaffId(wxEnterpriseId, staffId) ;
if(CollectionUtils.isEmpty(relationList)) {
return newClerkId ;
}
relationList = relationList.stream().filter(o->o.getStoreId().equals(storeId)).collect(Collectors.toList()) ;
if(CollectionUtils.isEmpty(relationList)) {
return newClerkId ;
}
return relationList.get(0).getClerkId() ;
}
/*
* 导购进行解绑/换导购,更新好友和导购关联关系
*/
@Override
public boolean delBind(String oldClerkId, String optStaffId, int channelCode, String newClerkId, String wxEnterpriseId) {
boolean changeClerkFlag = StringUtils.isNotEmpty(newClerkId) ;
logger.info("导购解绑/换导购={},oldClerkId={},optStaffId={}",changeClerkFlag,oldClerkId,optStaffId);
logger.info("导购解绑/换导购={},oldClerkId={},optStaffId={},newClerkId={},channelCode={}",changeClerkFlag,oldClerkId,optStaffId,newClerkId,channelCode);
if(StringUtils.isNotEmpty(optStaffId) && !"-1".equals(optStaffId)) {
TabHaobanStaff staff = this.staffService.selectById(optStaffId) ;
if(null != staff) {
......@@ -119,6 +137,8 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
logger.info("老的绑定关联不存在,oldClerkId={}", oldClerkId);
return true;
}
newClerkId = this.changeExistClerk(clerkRelation.getWxEnterpriseId() ,clerkRelation.getStaffId() , newClerkId) ;
logger.info("转换后的新导购={}",newClerkId);
// 如果是区经
if(clerkRelation.getManageFlag()==1) {
this.mapper.changeStatusByClerkId(oldClerkId, 0);
......
......@@ -20,10 +20,7 @@ import com.gic.haoban.manage.web.utils.data.ConcurrencyUtils;
import com.gic.haoban.manage.web.utils.data.MapThreadHandlerRequest;
import com.gic.haoban.manage.web.utils.data.StoreAuthUtils;
import com.gic.haoban.manage.web.utils.eventtracking.DateExpandUtils;
import com.gic.haoban.manage.web.vo.eventtracking.TrendVO;
import com.gic.haoban.manage.web.vo.eventtracking.ViewModuleVO;
import com.gic.haoban.manage.web.vo.eventtracking.WechatEventTrackingClerkVO;
import com.gic.haoban.manage.web.vo.eventtracking.WechatEventTrackingStoreGroupVO;
import com.gic.haoban.manage.web.vo.eventtracking.*;
import com.gic.haoban.manage.web.vo.wechatwork.DataPageVO;
import com.gic.qcloud.BucketNameEnum;
import com.gic.web.common.controller.NewBaseController;
......@@ -66,10 +63,10 @@ public class EventTrackingController extends NewBaseController {
* @return
*/
@RequestMapping(value = "overview")
public RestResponse overview(@RequestBody WechatOverviewQO qo) {
public RestResponse<WechatEventTrackingOverviewVO> overview(@RequestBody WechatOverviewQO qo) {
Map<String, Object> res = DataApiUtils.http(getOverviewParam(qo).toJSONString(), "data_point_anal_hb_app_overview");
List<JSONObject> list = DataApiUtils.getDataList(res);
return RestResponse.successResult(CollectionUtils.isEmpty(list) ? null : list.get(0));
return RestResponse.successResult(CollectionUtils.isEmpty(list) ? new WechatEventTrackingOverviewVO() : JSONObject.parseObject(JSON.toJSONString(list.get(0)), WechatEventTrackingOverviewVO.class));
}
/**
......@@ -113,11 +110,11 @@ public class EventTrackingController extends NewBaseController {
JSONObject jsonParam = getOverviewParam(qo);
List<MapThreadHandlerRequest> list = new ArrayList<>();
// 1 访问次数 2 访问人数 3 访问时长
jsonParam.put("orderByField", 1);
jsonParam.put("orderByFields", 1);
list.add(new MapThreadHandlerRequest(jsonParam, "data_point_anal_hb_app_module", "1_visitCnt"));
jsonParam.put("orderByField", 2);
jsonParam.put("orderByFields", 2);
list.add(new MapThreadHandlerRequest(jsonParam, "data_point_anal_hb_app_module", "2_visitNum"));
jsonParam.put("orderByField", 3);
jsonParam.put("orderByFields", 3);
list.add(new MapThreadHandlerRequest(jsonParam, "data_point_anal_hb_app_module", "3_visitTime"));
Map<String, List<JSONObject>> map = ConcurrencyUtils.concurrencyDataForMap(list);
......@@ -151,10 +148,11 @@ public class EventTrackingController extends NewBaseController {
public RestResponse<DataPageVO<WechatEventTrackingStoreGroupVO>> storeGroup(@RequestBody WechatEventTrackingStoreGroupQO qo) {
JSONObject jsonObject = new JSONObject();
qo.dealWithParam(jsonObject);
storeAuthUtils.setStoreGroupJsonParam(jsonObject, qo);
List<String> statusList = new ArrayList<>();
statusList.add("2");
storeAuthUtils.setStoreGroupJsonParam(jsonObject, qo.setStatusList(statusList));
jsonObject.put("apolloKey", "data_point_anal_hb_app_store");
DataPageVO vo = storeAuthUtils.getDataCommon(jsonObject.toJSONString(), qo.getPageNum(), "data_point_anal_hb_app_store", qo.getPageSize(), true);
storeAuthUtils.deleteTotalData(vo);
DataPageVO vo = storeAuthUtils.getDataCommonParent(jsonObject.toJSONString(), qo.getPageNum(), "data_point_anal_hb_app_store", qo.getPageSize(), true, true);
if (CollectionUtils.isNotEmpty(vo.getRows())) {
vo.setRows(JSONArray.parseArray(JSON.toJSONString(vo.getRows()), WechatEventTrackingStoreGroupVO.class));
}
......@@ -178,7 +176,9 @@ public class EventTrackingController extends NewBaseController {
JSONObject jsonObject = new JSONObject();
qo.dealWithParam(jsonObject);
storeAuthUtils.setStoreGroupJsonParam(jsonObject, qo);
List<String> statusList = new ArrayList<>();
statusList.add("2");
storeAuthUtils.setStoreGroupJsonParam(jsonObject, qo.setStatusList(statusList));
jsonObject.put("apolloKey", "data_point_anal_hb_app_store");
//Excel的标题是字段进行计算
List<String> indexList = new ArrayList<>();
......@@ -231,8 +231,10 @@ public class EventTrackingController extends NewBaseController {
public RestResponse<DataPageVO<WechatEventTrackingClerkVO>> clerk(@RequestBody WechatEventTrackingClerkDetailQO qo) {
JSONObject jsonObject = new JSONObject();
qo.dealWithParam(jsonObject);
List<String> statusList = new ArrayList<>();
statusList.add("2");
storeAuthUtils.setStoreGroupJsonParam(jsonObject, new StoreGroupCommonQO()
.setStoreGroupId(qo.getStoreGroupId()).setStoreId(qo.getStoreId()));
.setStoreGroupId(qo.getStoreGroupId()).setStoreId(qo.getStoreId()).setStatusList(statusList));
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_point_anal_hb_app_clerk");
DataPageVO<WechatEventTrackingClerkVO> vo = new DataPageVO<>();
......@@ -255,7 +257,10 @@ public class EventTrackingController extends NewBaseController {
@RequestMapping(value = "get-unaffiliated-store")
public RestResponse<List<String>> getUnaffiliatedStoreByStoreGroupId(String storeGroupId) {
WebLoginDTO login = AuthWebRequestUtil.getLoginUser();
return RestResponse.successResult(storeAuthUtils.getPreStoreIdList(storeGroupId, login.getEnterpriseId()));
List<String> statusList = new ArrayList<>();
statusList.add("2");
return RestResponse.successResult(storeAuthUtils.getPreStoreIdListCommon(storeGroupId, login.getEnterpriseId(), statusList));
}
/**
......@@ -275,8 +280,10 @@ public class EventTrackingController extends NewBaseController {
JSONObject jsonObject = new JSONObject();
qo.dealWithParam(jsonObject);
List<String> statusList = new ArrayList<>();
statusList.add("2");
storeAuthUtils.setStoreGroupJsonParam(jsonObject, new StoreGroupCommonQO()
.setStoreGroupId(qo.getStoreGroupId()).setStoreId(qo.getStoreId()));
.setStoreGroupId(qo.getStoreGroupId()).setStoreId(qo.getStoreId()).setStatusList(statusList));
jsonObject.put("apolloKey", "data_point_anal_hb_app_clerk");
//Excel的标题是字段进行计算
List<String> indexList = new ArrayList<>();
......@@ -318,7 +325,10 @@ public class EventTrackingController extends NewBaseController {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
jsonObject.remove("storeGroupId");
jsonObject.remove("storeId");
storeAuthUtils.setCommonParam(jsonObject, new StoreGroupCommonQO().setStoreGroupId(qo.getStoreGroupId()).setStoreId(qo.getStoreId()));
List<String> statusList = new ArrayList<>();
statusList.add("2");
storeAuthUtils.setCommonParam(jsonObject, new StoreGroupCommonQO().setStoreGroupId(qo.getStoreGroupId()).setStoreId(qo.getStoreId()).setStatusList(statusList));
return jsonObject;
}
}
......@@ -32,6 +32,8 @@ public class WechatEventTrackingClerkDetailHandle extends DownloadHandlerAbstrac
LOGGER.info("数据-登录数据-好办使用导购详情导出日志");
}
JSONObject jsonObject = JSON.parseObject(searchDataParams);
jsonObject.put("pageNum", currentPage);
jsonObject.put("pageSize", getPageSize());
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_point_anal_hb_app_clerk");
List<JSONObject> list = DataApiUtils.getPageList(res);
if (CollectionUtils.isNotEmpty(list)) {
......
......@@ -26,9 +26,8 @@ public class WechatEventTrackingStoreGroupHandle extends DownloadHandlerAbstract
@Override
public List<WechatEventTrackingStoreGroupVO> getData(Context context, String searchDataParams, Integer currentPage) {
List<JSONObject> list = storeAuthUtils.getDataCommon(searchDataParams, currentPage,
"数据-登录数据-好办使用详情导出日志进来", getPageSize(), false).getRows();
list = storeAuthUtils.deleteTotalData(list);
List<JSONObject> list = storeAuthUtils.getDataCommonParent(searchDataParams, currentPage,
"数据-登录数据-好办使用详情导出日志进来", getPageSize(), false, true).getRows();
if (CollectionUtils.isNotEmpty(list)) {
List<WechatEventTrackingStoreGroupVO> result = JSONObject.parseArray(JSON.toJSONString(list), WechatEventTrackingStoreGroupVO.class);
return result;
......
......@@ -101,7 +101,7 @@ public class WechatEventTrackingClerkDetailQO implements Serializable {
jsonObject.put("orderByType", orderByType);
}
if (orderByFields != null) {
jsonObject.put("orderByFields", getDataApiOrderField());
jsonObject.put("orderByFields", orderByFields);
}
if (isLogin != null) {
jsonObject.put("isLogin", isLogin);
......
......@@ -82,7 +82,7 @@ public class WechatEventTrackingStoreGroupQO extends StoreGroupCommonQO implemen
jsonObject.put("orderByType", orderByType);
}
if (orderByFields != null) {
jsonObject.put("orderByFields", getDataApiOrderField());
jsonObject.put("orderByFields", orderByFields);
}
jsonObject.put("pageNum", pageNum);
jsonObject.put("pageSize", pageSize);
......
......@@ -4,6 +4,7 @@ import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
* @Author guojx
......@@ -42,6 +43,11 @@ public class StoreGroupCommonQO implements Serializable {
*/
private Integer showStore;
/**
* 门店状态
*/
private List<String> statusList;
public boolean isRecycle() {
return "-3".equals(nextStoreGroupId);
}
......
......@@ -55,6 +55,11 @@ public class StoreAuthUtils {
List<String> storeIdList = new ArrayList<>();
List<String> statusList = getAllStoreStatus();
List<String> statusListParam = storeCommonQO.getStatusList();
if (CollectionUtils.isNotEmpty(statusListParam)) {
statusList.retainAll(statusListParam);
}
if (StringUtils.isNotBlank(storeId)) {
storeIdList.addAll(Arrays.stream(storeId.split(",")).collect(Collectors.toList()));
}
......@@ -156,6 +161,10 @@ public class StoreAuthUtils {
}
public DataPageVO getDataCommon(String searchDataParams, Integer currentPage, String logStr, Integer pageSize, boolean hasCountPerPage) {
return getDataCommonParent(searchDataParams, currentPage, logStr, pageSize, hasCountPerPage, false);
}
public DataPageVO getDataCommonParent(String searchDataParams, Integer currentPage, String logStr, Integer pageSize, boolean hasCountPerPage, boolean noTotal) {
boolean isFirst = currentPage != null && currentPage == 1;
if (isFirst) {
log.info(logStr);
......@@ -180,55 +189,37 @@ public class StoreAuthUtils {
Integer totalCount = page.getTotalCount();
vo.setTotalNum(totalCount);
//调用一次合计
if (hasCountPerPage || (isFirst && CollectionUtils.isNotEmpty(list))) {
if (hasCountPerPage && CollectionUtils.isEmpty(list)) {
list = new ArrayList<>();
}
jsonObject.put("pageNum", 1);
if (!noTotal) {
//调用一次合计
if (hasCountPerPage || (isFirst && CollectionUtils.isNotEmpty(list))) {
if (hasCountPerPage && CollectionUtils.isEmpty(list)) {
list = new ArrayList<>();
}
jsonObject.put("pageNum", 1);
jsonObject.put("storeGroup", 8);
String totalApolloKey = apolloKey;
if (StringUtils.isNotBlank(allApolloKey)) {
totalApolloKey = allApolloKey;
}
JSONObject total = getTotalJson(jsonObject, totalApolloKey);
if (total == null) {
total = new JSONObject();
}
if (isStore) {
total.put("storeName", "合计(" + totalCount + ")");
} else {
total.put("storeGroupName", "合计(" + totalCount + ")");
}
total.put("storeGroupId", "all");
jsonObject.put("storeGroup", 8);
String totalApolloKey = apolloKey;
if (StringUtils.isNotBlank(allApolloKey)) {
totalApolloKey = allApolloKey;
}
JSONObject total = getTotalJson(jsonObject, totalApolloKey);
if (total == null) {
total = new JSONObject();
}
if (isStore) {
total.put("storeName", "合计(" + totalCount + ")");
} else {
total.put("storeGroupName", "合计(" + totalCount + ")");
}
total.put("storeGroupId", "all");
list.add(0, total);
list.add(0, total);
}
}
vo.setRows(list);
return vo;
}
/**
* 删除合计的那条数据
* @param vo
*/
public void deleteTotalData(DataPageVO vo) {
deleteTotalData(vo.getRows());
}
public List<JSONObject> deleteTotalData(List<JSONObject> list) {
if (CollectionUtils.isNotEmpty(list)) {
if (list.size() == 1 && "all".equals(list.get(0).getString("storeGroupId"))) {
return Collections.EMPTY_LIST;
} else {
//删除合计的那条数据
list.remove(0);
}
}
return list;
}
private List<String> getStore(String enterpriseId, String userId, String search, List<String> storeGroupIdList, List<String> status, List<String> storeIdList) {
StoreSearchDTO storeSearchDTO = new StoreSearchDTO();
storeSearchDTO.setEnterpriseId(enterpriseId);
......@@ -260,10 +251,19 @@ public class StoreAuthUtils {
}
public List<String> getPreStoreIdList(String preStoreGroupId, String enterpriseId) {
return getPreStoreIdListCommon(preStoreGroupId, enterpriseId, null);
}
public List<String> getPreStoreIdListCommon(String preStoreGroupId, String enterpriseId, List<String> statusList) {
preStoreGroupId = getPreStoreGroupId(preStoreGroupId, enterpriseId);
String[] queryArr = new String[]{preStoreGroupId};
List<String> defaultStatusList = getAllStoreStatus();
if (CollectionUtils.isNotEmpty(statusList)) {
defaultStatusList.retainAll(statusList);
}
List<String> storeIdList = storeService.getStoreIdListByGroupId(queryArr,
getAllStoreStatus().stream().mapToInt(e -> Integer.parseInt(e)).boxed().collect(Collectors.toList()));
defaultStatusList.stream().mapToInt(e -> Integer.parseInt(e)).boxed().collect(Collectors.toList()));
if (CollectionUtils.isEmpty(storeIdList)) {
storeIdList.add(NO_EXIST_STORE_ID);
}
......
......@@ -35,8 +35,12 @@ public class DateExpandUtils {
list = DateUtil.getBetweenDates(df.format(calendar.getTime()), dateType == 1 ? startDate : endDate);
break;
case 4:
calendar.setTime(DateUtil.strToDate(startDate, "yyyy-MM-dd"));
calendar.add(Calendar.WEEK_OF_YEAR, -11);
JSONObject jsonObject = new JSONObject();
jsonObject.put("startDate", startDate);
jsonObject.put("startDate", df.format(calendar.getTime()));
jsonObject.put("endDate", startDate);
jsonObject.put("pageNum", 1);
jsonObject.put("pageSize", 100);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_pub_date_week");
......@@ -60,4 +64,37 @@ public class DateExpandUtils {
}
return list;
}
public static String getVisitTimeStr(Long avgVisitTime) {
if (avgVisitTime != null) {
int hour = (int) (avgVisitTime / 3600);
String str = getTimeStr(hour);
if (hour > 0) {
avgVisitTime = avgVisitTime - (3600 * hour);
}
int minute = (int) (avgVisitTime / 60);
str = str + ":" + getTimeStr(minute);
if (minute > 0) {
avgVisitTime = avgVisitTime - (60 * minute);
}
str = str +":"+ getTimeStr(avgVisitTime.shortValue());
return str;
}
return null;
}
private static String getTimeStr(int time) {
String str = "";
if (time == 0) {
str = "00";
} else if (time < 10) {
str = "0" + time + "";
} else {
str = "" + time;
}
return str;
}
}
......@@ -11,6 +11,8 @@ import java.io.Serializable;
@Data
public class TrendVO implements Serializable {
private Integer avgVisitTime;
/**
* 员工总人数
*/
......
package com.gic.haoban.manage.web.vo.eventtracking;
import com.gic.haoban.manage.web.utils.eventtracking.DateExpandUtils;
import com.gic.haoban.manage.web.vo.wechatwork.StoreGroupCommonVO;
import lombok.Data;
......@@ -52,35 +53,6 @@ public class WechatEventTrackingClerkVO extends StoreGroupCommonVO implements Se
private String clerkCode;
public String getVisitTimeStr() {
if (avgVisitTime != null) {
int hour = (int) (avgVisitTime / 3600);
String str = getTimeStr(hour);
if (hour > 0) {
avgVisitTime = avgVisitTime - (3600 * hour);
}
int minute = (int) (avgVisitTime / 60);
str = str + ":" + getTimeStr(minute);
if (minute > 0) {
avgVisitTime = avgVisitTime - (60 * minute);
}
str = str +":"+ getTimeStr(avgVisitTime.shortValue());
return str;
}
return visitTimeStr;
}
private static String getTimeStr(int time) {
String str = "";
if (time == 0) {
str = "00";
} else if (time < 10) {
str = "0" + time + "";
} else {
str = "" + time;
}
return str;
return DateExpandUtils.getVisitTimeStr(avgVisitTime);
}
}
package com.gic.haoban.manage.web.vo.eventtracking;
import com.gic.haoban.manage.web.utils.eventtracking.DateExpandUtils;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public class WechatEventTrackingOverviewVO implements Serializable {
/**
* 次均访问时长 单位秒
*/
private Long avgVisitTime;
/**
* 次均访问时长较前一期
*/
private Double avgVisitTimeSply;
/**
* 次均访问时长 00:00:00格式
*/
private String visitTimeStr;
/**
* 访问次数
*/
private Integer visitCnt;
/**
* 访问次数较前一期
*/
private Double visitCntSply;
/**
* 活跃率
*/
private Double visitRate;
/**
* 活跃率较前一期
*/
private Double visitRateSply;
/**
* 活跃人数
*/
private Integer visitNum;
/**
* 活跃人数较前一期
*/
private Double visitNumSply;
/**
* 绑定率
*/
private Double bindingRate;
/**
* 绑定率较前一期
*/
private Double bindingRateSply;
/**
* 绑定人数
*/
private Integer bindingNum;
/**
* 绑定人数较前一期
*/
private Double bindingSply;
/**
* 员工总人数
*/
private Integer clerkNum;
public String getVisitTimeStr() {
return DateExpandUtils.getVisitTimeStr(avgVisitTime);
}
}
package com.gic.haoban.manage.web.controller.coupon;
import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.PageHelperUtils;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.manage.web.vo.coupon.CoupCardClerkLogCountVO;
import com.gic.haoban.manage.web.vo.coupon.CoupCardClerkLogVO;
import com.gic.haoban.manage.web.vo.coupon.CoupCardVO;
import com.gic.marketing.api.dto.CoupCardDTO;
import com.gic.marketing.api.dto.card.CoupCardClerkLogDTO;
import com.gic.marketing.api.out.service.CouponHBOuterService;
import com.gic.marketing.api.qdto.card.HaobanWriteOffCardQDTO;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* 卡券
*/
@RestController
@RequestMapping("/coupon")
public class CouponController {
private static final org.apache.logging.log4j.Logger logger = LogManager.getLogger(CouponController.class);
@Autowired
private CouponHBOuterService couponHBOuterService;
/**
* 卡券导购核销
* @param cardLogId 卡券日志id
* @param enterpriseId 企业id
* @param clerkId 导购id
* @return
*/
@RequestMapping("/clerk-write-off")
public RestResponse<CoupCardVO> writeOff(String cardLogId,
String enterpriseId,String clerkId) {
HaobanWriteOffCardQDTO writeOffCardQDTO = new HaobanWriteOffCardQDTO();
writeOffCardQDTO.setEnterpriseId(enterpriseId);
writeOffCardQDTO.setCardLogId(cardLogId);
writeOffCardQDTO.setClerkId(clerkId);
writeOffCardQDTO.setCardType(2);
ServiceResponse<CoupCardClerkLogDTO> response = couponHBOuterService.scanWriteOff(writeOffCardQDTO);
if (!response.isSuccess()) {
return RestResponse.failure(response.getCode(), response.getMessage());
}
CoupCardVO cardVO = getCardVO(response.getResult());
return RestResponse.successResult(cardVO);
}
/**
* 卡券导购核销列表
* @param pageInfo 分页参数
* @param enterpriseId 企业id
* @param clerkId 导购id
* @param writeOffType 核销类型 1客户核销2导购核销
* @return
*/
@RequestMapping("/clerk-list")
public RestResponse<Page<CoupCardClerkLogVO>> list(BasePageInfo pageInfo,
String enterpriseId,String clerkId,Integer writeOffType) {
Page<CoupCardClerkLogDTO> page = new Page<>();
page.setCurrentPage(pageInfo.getPageNum());
page.setPageSize(pageInfo.getPageSize());
Map<String, Object> params = new HashMap<>();
params.put("clerkId", clerkId);
params.put("writeOffType", writeOffType);
page.setParams(params);
ServiceResponse<Page<CoupCardClerkLogDTO>> response = couponHBOuterService.pageClerkLog(enterpriseId, page);
if (!response.isSuccess()) {
return RestResponse.failure(response.getCode(), response.getMessage());
}
Page<CoupCardClerkLogVO> retPage = PageHelperUtils.changePageToCurrentPage(response.getResult(), CoupCardClerkLogVO.class);
return RestResponse.successResult(retPage);
}
/**
* 卡券导购核销详情
* @param clerkLogId
* @return
*/
@RequestMapping("/clerk-get")
public RestResponse<CoupCardVO> get(String clerkLogId) {
ServiceResponse<CoupCardClerkLogDTO> response = couponHBOuterService.getClerkLogById(clerkLogId);
if (!response.isSuccess()) {
return RestResponse.failure(response.getCode(), response.getMessage());
}
if (response.getResult() == null) {
return RestResponse.successResult();
}
CoupCardVO coupCardVO = getCardVO(response.getResult());
return RestResponse.successResult(coupCardVO);
}
private static CoupCardVO getCardVO(CoupCardClerkLogDTO result) {
if (result == null) {
return null;
}
CoupCardVO coupCardVO = EntityUtil.changeEntityNew(CoupCardVO.class, result);
CoupCardDTO coupCardDTO = result.getCoupCardDTO();
if (coupCardDTO != null) {
coupCardVO.setUseCondition(coupCardDTO.getUseCondition());
coupCardVO.setEffectTime(coupCardDTO.getEffectTime());
coupCardVO.setLimitTime(coupCardDTO.getLimitTime());
coupCardVO.setStatus(coupCardDTO.getStatus());
coupCardVO.setThirdName(coupCardDTO.getThirdName());
coupCardVO.setMemberName(coupCardDTO.getMemberName());
coupCardVO.setPhoneNum(coupCardDTO.getPhoneNum());
coupCardVO.setCardNum(coupCardDTO.getCardNum());
}
coupCardVO.setUseTime(result.getCreateTime());
return coupCardVO;
}
/**
* 卡券核销数量
* @param enterpriseId 企业id
* @param clerkId 导购id
* @return
*/
@RequestMapping("/clerk-count")
public RestResponse<CoupCardClerkLogCountVO> get(String enterpriseId, String clerkId) {
ServiceResponse<Integer> memberResponse = couponHBOuterService.countClerkLog(enterpriseId, clerkId, 1);
ServiceResponse<Integer> clerkResponse = couponHBOuterService.countClerkLog(enterpriseId, clerkId, 2);
Integer memberCount = memberResponse.getResult();
Integer clerkCount = clerkResponse.getResult();
CoupCardClerkLogCountVO countVO = new CoupCardClerkLogCountVO();
countVO.setMemberCount(memberCount == null ? 0 :memberCount);
countVO.setClerkCount(clerkCount == null ? 0 :clerkCount);
return RestResponse.successResult(countVO);
}
}
......@@ -495,7 +495,7 @@ public class GicOrderController {
}
// 订单详情
private OrderDetailVO getOrderDetail(String enterpriseId, OrderInfoDTO orderInfo,
public OrderDetailVO getOrderDetail(String enterpriseId, OrderInfoDTO orderInfo,
List<ListOrderItemDTO> orderItemDTOList, String storeId) {
OrderDetailVO orderDetailVO = EntityUtil.changeEntityByJSON(OrderDetailVO.class, orderInfo);
orderDetailVO.setUsePoint(orderInfo.getUsePoints());
......
package com.gic.haoban.manage.web.controller.scan;
import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.business.order.dto.ordermanage.OrderDetailDTO;
import com.gic.business.order.qdto.ordermanage.QueryOrderDetailQDTO;
import com.gic.business.order.service.ordermanage.WebOrderManageApiService;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.GlobalInfo;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.manage.web.controller.order.GicOrderController;
import com.gic.haoban.manage.web.vo.coupon.CoupCardVO;
import com.gic.haoban.manage.web.vo.order.OrderDetailVO;
import com.gic.haoban.manage.web.vo.scan.ScanDetailVO;
import com.gic.marketing.api.dto.CoupCardDTO;
import com.gic.marketing.api.out.service.CouponHBOuterService;
import com.gic.marketing.api.qdto.card.HaobanWriteOffCardQDTO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* 工作台
*/
@RestController
@RequestMapping("/scan")
public class ScanController {
private static final org.apache.logging.log4j.Logger logger = LogManager.getLogger(ScanController.class);
@Autowired
GicOrderController getOrderDetail;
@Autowired
private WebOrderManageApiService webOrderManageApiService;
@Autowired
private CouponHBOuterService couponHBOuterService;
@Autowired
private ClerkService clerkService;
/**
* 原有扫码接口聚合
* @see GicOrderController#scan(String, String, String)
* @param enterpriseId 企业id
* @param writeOffCode 核销码
* @param storeId 门店id
* @param clerkId 导购id
* @param analysisFlag 是否扫码 1是 0否
* @return
*/
@RequestMapping("/all")
public RestResponse<ScanDetailVO> scan(String enterpriseId, String writeOffCode, String storeId,String clerkId,Integer analysisFlag) {
if (StringUtils.isEmpty(writeOffCode)) {
return RestResponse.failure("9999", "核销码为空");
}
ScanDetailVO scanDetailVO = new ScanDetailVO();
// 通过核销码查询
QueryOrderDetailQDTO qdto = new QueryOrderDetailQDTO();
qdto.setEnterpriseId(enterpriseId);
qdto.setWriteOffCode(writeOffCode);
ServiceResponse<OrderDetailDTO> ret = webOrderManageApiService.getOrderDetail(qdto);
OrderDetailDTO detail = ret.getResult();
logger.info("订单信息={}", JSON.toJSONString(ret));
//订单
if (ret.isSuccess() && detail != null) {
// 已核销,且不是好办核销的
if (null != detail.getOrderInfo().getDeliveryOptType()
&& detail.getOrderInfo().getDeliveryOptType() != 1) {
logger.info("已核销,且不是好办核销的={}", writeOffCode);
scanDetailVO.setOrderError("此自提点无法核销");
}
if (!storeId.equals(detail.getOrderInfo().getPickUpStoreId())) {
scanDetailVO.setOrderError("此自提点无法核销");
}
OrderDetailVO orderDetailVO = getOrderDetail.getOrderDetail(enterpriseId, ret.getResult().getOrderInfo(),
ret.getResult().getOrderItemList(), storeId);
if (!(orderDetailVO.getOrderStep().equals("2") || orderDetailVO.getOrderStep().equals("4"))) {
scanDetailVO.setOrderError("核销订单不存在");
}
Date pickOverTime = detail.getOrderInfo().getPickUpOverTime();
if (null != pickOverTime && pickOverTime.before(new Date())) {
scanDetailVO.setOrderError("此订单自提时间已截止");
}
scanDetailVO.setOrderDetailVO(orderDetailVO);
}
//卡券
HaobanWriteOffCardQDTO writeOffCardQDTO = new HaobanWriteOffCardQDTO();
writeOffCardQDTO.setEnterpriseId(enterpriseId);
writeOffCardQDTO.setCardCode(writeOffCode);
writeOffCardQDTO.setClerkId(clerkId);
writeOffCardQDTO.setCardType(2);
writeOffCardQDTO.setAnalysisFlag(analysisFlag);
ServiceResponse<List<CoupCardDTO>> couponRet = couponHBOuterService.getCardLogByCode(writeOffCardQDTO);
if (couponRet.isSuccess() && CollectionUtils.isNotEmpty(couponRet.getResult())) {
List<CoupCardDTO> couponList = couponRet.getResult();
CoupCardDTO coupCardDTO = couponList.get(0);
if (couponList.size() > 1) {
scanDetailVO.setCouponError("识别到多张兑换券,为防止核销错误,请协助会员,在会员小程序中进行兑换券核销");
scanDetailVO.setCouponErrorType(1);
}else {
boolean checkStore = coupCardDTO.isCheckStore();
if (!checkStore) {
scanDetailVO.setCouponError("兑换券在本店不可用");
}
Integer verificationType = coupCardDTO.getVerificationType();
if (!Objects.equals(verificationType, 0)) {
scanDetailVO.setCouponError("请通过收银台核销此兑换券");
}
}
CoupCardVO cardVO = EntityUtil.changeEntityNew(CoupCardVO.class, coupCardDTO);
if (Objects.equals(GlobalInfo.COUPON_STATUS_USED, coupCardDTO.getStatus())) {
cardVO.setStoreName(coupCardDTO.getOrderStoreName());
cardVO.setClerkName(coupCardDTO.getOrderClerkName());
}else {
ClerkDTO clerkDTO = clerkService.getclerkById(clerkId);
if (clerkDTO != null) {
cardVO.setStoreName(clerkDTO.getStoreName());
cardVO.setClerkName(clerkDTO.getClerkName());
}
}
cardVO.setUseTime(coupCardDTO.getUseTime());
scanDetailVO.setCardVO(cardVO);
}
return RestResponse.successResult(scanDetailVO);
}
}
package com.gic.haoban.manage.web.vo.coupon;
import java.io.Serializable;
import java.util.Date;
public class CoupCardClerkLogCountVO implements Serializable {
private static final long serialVersionUID = 707322017107902L;
/**
* 导购核销数量
*/
private Integer clerkCount = 0 ;
/**
* 会员核销数量
*/
private Integer memberCount = 0;
/**
* 总核销数量
*/
private Integer totalCount = 0;
public Integer getClerkCount() {
return clerkCount;
}
public void setClerkCount(Integer clerkCount) {
this.clerkCount = clerkCount;
}
public Integer getMemberCount() {
return memberCount;
}
public void setMemberCount(Integer memberCount) {
this.memberCount = memberCount;
}
public Integer getTotalCount() {
return this.memberCount + clerkCount;
}
public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
}
}
\ No newline at end of file
package com.gic.haoban.manage.web.vo.coupon;
import java.io.Serializable;
import java.util.Date;
public class CoupCardClerkLogVO implements Serializable {
private static final long serialVersionUID = 707322017107902L;
/**主键*/
private String clerkLogId;
/**企业id*/
private String enterpriseId;
/** 会员id */
private String memberId;
/** 卡券日志id */
private String cardLogId;
/**
* 卡券编码
*/
private String cardCode;
/**
* 卡券名称
*/
private String cardName;
/** 卡券id */
private String coupCardId;
/** 门店id */
private String storeId;
/** 门店code */
private String storeCode;
/** 门店名称 */
private String storeName;
/** 导购id */
private String clerkId;
/** 导购名称 */
private String clerkName;
/** 导购code */
private String clerkCode;
/**
* 核销类型1客户核销2导购核销
*/
private Integer writeOffType;
private Date updateTime;
private Date createTime;
/**
* 核销时间
*/
private Date useTime;
public String getClerkLogId() {
return clerkLogId;
}
public void setClerkLogId(String clerkLogId) {
this.clerkLogId = clerkLogId;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getCardLogId() {
return cardLogId;
}
public void setCardLogId(String cardLogId) {
this.cardLogId = cardLogId;
}
public String getCardName() {
return cardName;
}
public void setCardName(String cardName) {
this.cardName = cardName;
}
public String getCardCode() {
return cardCode;
}
public void setCardCode(String cardCode) {
this.cardCode = cardCode;
}
public String getCoupCardId() {
return coupCardId;
}
public void setCoupCardId(String coupCardId) {
this.coupCardId = coupCardId;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getStoreCode() {
return storeCode;
}
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getClerkName() {
return clerkName;
}
public void setClerkName(String clerkName) {
this.clerkName = clerkName;
}
public String getClerkCode() {
return clerkCode;
}
public void setClerkCode(String clerkCode) {
this.clerkCode = clerkCode;
}
public Integer getWriteOffType() {
return writeOffType;
}
public void setWriteOffType(Integer writeOffType) {
this.writeOffType = writeOffType;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUseTime() {
return createTime;
}
public void setUseTime(Date useTime) {
this.useTime = useTime;
}
}
\ No newline at end of file
package com.gic.haoban.manage.web.vo.coupon;
import java.io.Serializable;
import java.util.Date;
public class CoupCardVO implements Serializable {
private static final long serialVersionUID = -5868328668312616015L;
/**
* 卡券日志id
*/
private String cardLogId;
/**
* 卡券id
*/
private String coupCardId;
/**
* 卡券名称
*/
private String cardName;
/**
* 使用条件
*/
private String useCondition;
/**
* 券号
*/
private String cardCode;
/**
* 生效时间
*/
private Date effectTime;
/**
* 截止时间
*/
private Date limitTime;
/**
* 状态 待领取:3; 待核销:4; 已核销:5; 已过期:6; 已销毁:7; 已占用:8; 转赠中:9 ;已转赠:10
*/
private Integer status;
/**
* 会员昵称
*/
private String thirdName;
/**
* 会员名称
*/
private String memberName;
/**
* 会员手机号码
*/
private String phoneNum;
/**
* 会员卡号
*/
private String cardNum;
/**
* 门店名称
*/
private String storeName;
/**
* 导购名称
*/
private String clerkName;
/**
* 核销时间
*/
private Date useTime;
public String getCardLogId() {
return cardLogId;
}
public void setCardLogId(String cardLogId) {
this.cardLogId = cardLogId;
}
public String getCoupCardId() {
return coupCardId;
}
public void setCoupCardId(String coupCardId) {
this.coupCardId = coupCardId;
}
public String getCardName() {
return cardName;
}
public void setCardName(String cardName) {
this.cardName = cardName;
}
public String getUseCondition() {
return useCondition;
}
public void setUseCondition(String useCondition) {
this.useCondition = useCondition;
}
public String getCardCode() {
return cardCode;
}
public void setCardCode(String cardCode) {
this.cardCode = cardCode;
}
public Date getEffectTime() {
return effectTime;
}
public void setEffectTime(Date effectTime) {
this.effectTime = effectTime;
}
public Date getLimitTime() {
return limitTime;
}
public void setLimitTime(Date limitTime) {
this.limitTime = limitTime;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getThirdName() {
return thirdName;
}
public void setThirdName(String thirdName) {
this.thirdName = thirdName;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getCardNum() {
return cardNum;
}
public void setCardNum(String cardNum) {
this.cardNum = cardNum;
}
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
public String getClerkName() {
return clerkName;
}
public void setClerkName(String clerkName) {
this.clerkName = clerkName;
}
public Date getUseTime() {
return useTime;
}
public void setUseTime(Date useTime) {
this.useTime = useTime;
}
}
package com.gic.haoban.manage.web.vo.scan;
import com.gic.haoban.manage.web.vo.coupon.CoupCardVO;
import com.gic.haoban.manage.web.vo.order.OrderDetailVO;
import com.gic.marketing.api.dto.CoupCardDTO;
import java.io.Serializable;
public class ScanDetailVO implements Serializable {
private static final long serialVersionUID = 5215230055823016992L;
/**
* 订单详情
*/
private OrderDetailVO orderDetailVO;
/**
* 卡券详情
*/
private CoupCardVO cardVO;
/**
* 订单错误信息
*/
private String orderError;
/**
* 卡券错误信息
*/
private String couponError;
/**
* 错误信息类型 1弹窗
*/
private Integer couponErrorType = 0;
public OrderDetailVO getOrderDetailVO() {
return orderDetailVO;
}
public void setOrderDetailVO(OrderDetailVO orderDetailVO) {
this.orderDetailVO = orderDetailVO;
}
public CoupCardVO getCardVO() {
return cardVO;
}
public void setCardVO(CoupCardVO cardVO) {
this.cardVO = cardVO;
}
public String getOrderError() {
return orderError;
}
public void setOrderError(String orderError) {
this.orderError = orderError;
}
public String getCouponError() {
return couponError;
}
public void setCouponError(String couponError) {
this.couponError = couponError;
}
public Integer getCouponErrorType() {
return couponErrorType;
}
public void setCouponErrorType(Integer couponErrorType) {
this.couponErrorType = couponErrorType;
}
}
......@@ -21,6 +21,7 @@
<dubbo:reference interface="com.gic.marketing.api.service.WechatMarketingService" id="wechatMarketingService" />
<dubbo:reference interface="com.gic.marketing.pro.api.service.ai.AiMemberLogApiService" id="aiMemberLogApiService" />
<dubbo:reference interface="com.gic.marketing.api.service.CouponCardService" id="couponCardService" />
<dubbo:reference interface="com.gic.marketing.api.out.service.CouponHBOuterService" id="couponHBOuterService" />
<dubbo:reference interface="com.gic.game.api.service.GameService" id="gameService" />
<dubbo:reference interface="com.gic.enterprise.service.CustomSettingApiService" id="customSettingApiService" />
<dubbo:reference interface="com.gic.marketing.pro.api.service.game.GameApiService" id="gameApiService" />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment