记得上下班打卡 | git大法好,push需谨慎

Commit 999482d4 authored by Tice's avatar Tice

更新接口

parent 5b84e00d
......@@ -4,7 +4,7 @@ public class MerchantRedisConst {
public static final String PREFIX = "merchant:";
// 场地详情
public static final String INFO_FIELD = PREFIX.concat("info:field:");
public static final String INFO_FIELD = PREFIX.concat("info:fields:");
// 个人全部的场地申请
public static final String INFO_FIELD_APPLIES = PREFIX.concat("info:field_applies:");
......
......@@ -5,7 +5,9 @@ import com.liquidnet.service.merchant.dto.param.MerchantFieldsApplyParam;
import com.liquidnet.service.merchant.dto.vo.MerchantFieldsVo;
public interface IMerchantFieldsAppliesService {
PagedResult<MerchantFieldsVo> search(String name);
PagedResult<MerchantFieldsVo> search(String name, int page, int size);
String apply(MerchantFieldsApplyParam parameter);
String apply(String uid, MerchantFieldsApplyParam parameter);
void editIsCheck(String uid, String fieldId, int isCheck);
}
......@@ -141,7 +141,8 @@ public class MQConst {
}
public enum MerchantQueue {
SQL_MERCHANT_FIELD("merchant:stream:rk.sql.field", "group.sql.field", "场地相关")
// SQL_MERCHANT_FIELD("merchant:stream:rk.sql.field", "group.sql.field", "场地相关")
SQL_MERCHANT_FIELD("kylin:stream:rk.performance.lack", "group.performance.lack", "场地相关")
;
private final String key;
......
# use prod_ln_scene;
# 创建集合
db.createCollection("MerchantFieldsVo");
# 创建索引
db.MerchantFieldsVo.createIndex({fieldId:"hashed"});
db.MerchantFieldsVo.createIndex({isOnline:"hashed"});
db.MerchantFieldsVo.createIndex({uid:"hashed"});
\ No newline at end of file
package com.liquidnet.service.merchant.config;
import com.liquidnet.common.web.config.WebMvcConfig;
import com.liquidnet.common.web.filter.GlobalAuthorityInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
@Configuration
public class MerchantWebMvcConfig extends WebMvcConfig {
@Autowired
GlobalAuthorityInterceptor globalAuthorityInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(globalAuthorityInterceptor).addPathPatterns("/**");
super.addInterceptors(registry);
}
}
......@@ -2,20 +2,22 @@ package com.liquidnet.service.merchant.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.merchant.dto.param.MerchantFieldsApplyParam;
import com.liquidnet.service.merchant.dto.vo.MerchantFieldsVo;
import com.liquidnet.service.merchant.service.IMerchantFieldsAppliesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
/**
* <p>
......@@ -36,13 +38,32 @@ public class MerchantFieldsController {
@Autowired
IMerchantFieldsAppliesService merchantFieldsAppliesService;
@ApiOperationSupport(order = 1)
@ApiOperationSupport(order = 10)
@ApiOperation(value = "场地搜索")
@GetMapping("search")
public ResponseDto<PagedResult<MerchantFieldsVo>> list(@RequestParam(required = true) String name,
@RequestParam(defaultValue = "1", required = false) int page,
@RequestParam(defaultValue = "10", required = false) int size) {
return ResponseDto.success(merchantFieldsAppliesService.search(name, page, size));
}
@ApiOperationSupport(order = 11)
@ApiOperation(value = "申请场地")
@PostMapping("apply")
public ResponseDto<Object> apply(@Valid @RequestBody MerchantFieldsApplyParam parameter) {
return ResponseDto.success(merchantFieldsAppliesService.apply(parameter));
String currentUid = CurrentUtil.getCurrentUid();
return ResponseDto.success(merchantFieldsAppliesService.apply(currentUid, parameter));
}
@ApiOperationSupport(order = 12)
@ApiOperation(value = "更改场地是否审核演出")
@PostMapping("editIsCheck")
public ResponseDto<Object> editIsCheck(@RequestParam(required = true) String fieldId, @RequestParam(required = false) @Size(min = 0, max = 1) int isCheck){
String currentUid = CurrentUtil.getCurrentUid();
merchantFieldsAppliesService.editIsCheck(currentUid, fieldId, isCheck);
return ResponseDto.success();
}
}
......@@ -13,16 +13,25 @@ import com.liquidnet.service.merchant.dto.vo.MerchantFieldsAppliesVo;
import com.liquidnet.service.merchant.dto.vo.MerchantFieldsVo;
import com.liquidnet.service.merchant.service.IMerchantFieldsAppliesService;
import com.liquidnet.service.merchant.service.MerchantRdmService;
import com.liquidnet.service.merchant.util.ObjectUtil;
import com.liquidnet.service.merchant.util.QueueUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;
@Slf4j
@Service
......@@ -31,25 +40,44 @@ public class MerchantFieldsAppliesServiceImpl implements IMerchantFieldsAppliesS
@Autowired
MerchantRdmService merchantRdmService;
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
QueueUtil queueUtils;
@Override
public PagedResult<MerchantFieldsVo> search(String name) {
return null;
public PagedResult<MerchantFieldsVo> search(String name, int page, int size) {
Query query = new Query();
String regex = String.format("%s%s%s", "^.*", name, ".*$");
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
query.addCriteria(Criteria.where("name").regex(pattern));
query.addCriteria(Criteria.where("isOnline").is(1));
long count = mongoTemplate.count(query, MerchantFieldsVo.class, MerchantFieldsVo.class.getSimpleName());
PagedResult<MerchantFieldsVo> pagedResult = ObjectUtil.getMerchantFieldsVoPagedResult();
if (count > 0) {
query.fields().include("fieldId").include("isOnline").include("claimStatus").include("name");
Pageable pageable = PageRequest.of(page - 1, size, Sort.by(Sort.Direction.DESC, "createdAt"));
query.with(pageable);
List<MerchantFieldsVo> fieldsVoList = mongoTemplate.find(query, MerchantFieldsVo.class, MerchantFieldsVo.class.getSimpleName());
pagedResult.setList(fieldsVoList).setTotal(count, size);
}
return pagedResult;
}
@Override
public String apply(MerchantFieldsApplyParam parameter) {
String currentUid = CurrentUtil.getCurrentUid();
public String apply(String uid, MerchantFieldsApplyParam parameter) {
LocalDateTime now = LocalDateTime.now();
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
LinkedList<Object[]> fieldUpdateObjs = CollectionUtil.linkedListObjectArr();
LinkedList<Object[]> fieldApplyInsertObjs = CollectionUtil.linkedListObjectArr();
long s = System.currentTimeMillis();
// 若认领,查询验证场地
MerchantFieldsVo fieldsVo = null;
if (!parameter.getFieldId().isEmpty()) {
......@@ -62,18 +90,10 @@ public class MerchantFieldsAppliesServiceImpl implements IMerchantFieldsAppliesS
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("13002");
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
}
// vo 更改场地状态
fieldsVo.setClaimStatus(2);
fieldsVo.setUpdatedAt(now);
// redis
merchantRdmService.setFieldsVoByFieldId(fieldsVo.getFieldId(), fieldsVo);
log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s);
}
// vos 申请场地 上限
List<MerchantFieldsAppliesVo> fieldsAppliesVos = merchantRdmService.getFieldsAppliesVosByUid(currentUid);
// 申请场地 vos 上限
List<MerchantFieldsAppliesVo> fieldsAppliesVos = merchantRdmService.getFieldsAppliesVosByUid(uid);
if (!CollectionUtils.isEmpty(fieldsAppliesVos)) {
if (fieldsAppliesVos.size() >= 10) {
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("13003");
......@@ -81,32 +101,44 @@ public class MerchantFieldsAppliesServiceImpl implements IMerchantFieldsAppliesS
}
}
// 申请场地vo
long s = System.currentTimeMillis();
if (null != fieldsVo) {
// 场地 vo 更改场地状态
fieldsVo.setClaimStatus(2);
fieldsVo.setUpdatedAt(now);
// 场地 redis
merchantRdmService.setFieldsVoByFieldId(fieldsVo.getFieldId(), fieldsVo);
log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s);
}
// 申请场地 vo
MerchantFieldsAppliesVo fieldsAppliesVo = MerchantFieldsAppliesVo.getNew();
BeanUtils.copyProperties(parameter, fieldsAppliesVo);
fieldsAppliesVo.setFieldApplyId(IDGenerator.nextSnowId());
fieldsAppliesVo.setApplyStatus(0);
if (!fieldsAppliesVo.getFieldId().isEmpty()) {
if (null != fieldsVo) {
fieldsAppliesVo.setApplyType("claim");
} else {
fieldsAppliesVo.setApplyType("create");
}
fieldsAppliesVo.setReject("");
fieldsAppliesVo.setUid(currentUid);
fieldsAppliesVo.setUid(uid);
fieldsAppliesVo.setCreatedAt(now);
// redis
// 申请场地 redis
s = System.currentTimeMillis();
merchantRdmService.addFieldsAppliesVoByUid(currentUid, fieldsAppliesVos, fieldsAppliesVo);
merchantRdmService.addFieldsAppliesVoByUid(uid, fieldsAppliesVos, fieldsAppliesVo);
log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s);
// sql mapping
if (null != fieldsVo) {
// 场地 sql
toMqSqls.add(SqlMapping.get("merchant_fields.update_claim_status"));
fieldUpdateObjs.add(new Object[]{
fieldsVo.getClaimStatus(), fieldsVo.getUpdatedAt(), fieldsVo.getFieldId()
});
}
// 申请场地 sql
toMqSqls.add(SqlMapping.get("merchant_field_applies.insert"));
fieldApplyInsertObjs.add(new Object[]{
fieldsAppliesVo.getFieldApplyId(), fieldsAppliesVo.getApplyStatus(), fieldsAppliesVo.getApplyType(), fieldsAppliesVo.getReject(), fieldsAppliesVo.getUid(), fieldsAppliesVo.getFieldId(),
......@@ -116,6 +148,7 @@ public class MerchantFieldsAppliesServiceImpl implements IMerchantFieldsAppliesS
fieldsAppliesVo.getLegalName(), fieldsAppliesVo.getLegalIdentity(), fieldsAppliesVo.getLegalIdentityObverse(), fieldsAppliesVo.getLegalIdentityReverse(), fieldsAppliesVo.getCreatedAt()
});
// mq
s = System.currentTimeMillis();
if (null != fieldsVo) {
queueUtils.sendMsgByRedis(
......@@ -130,7 +163,48 @@ public class MerchantFieldsAppliesServiceImpl implements IMerchantFieldsAppliesS
}
log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s);
return fieldsAppliesVo.getFieldApplyId();
}
@Override
public void editIsCheck(String uid, String fieldId, int isCheck) {
LocalDateTime now = LocalDateTime.now();
MerchantFieldsVo fieldsVo = merchantRdmService.getFieldsVoByFieldId(fieldId);
if (null == fieldsVo || !fieldsVo.getUid().equals(uid)) {
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("13001");
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
}
// 场地 vo 更改是否自动审核
fieldsVo.setIsCheck(isCheck > 0 ? 1 : 0);
fieldsVo.setUpdatedAt(now);
// 场地 redis
long s = System.currentTimeMillis();
merchantRdmService.setFieldsVoByFieldId(fieldsVo.getFieldId(), fieldsVo);
log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s);
// 场地 mongo
Query query = Query.query(Criteria.where("fieldId").is(fieldsVo.getFieldId()));
Update update = Update.update("isCheck", fieldsVo.getIsCheck()).set("updateAt", fieldsVo.getUpdatedAt());
mongoTemplate.updateFirst(query, update, MerchantFieldsVo.class, MerchantFieldsVo.class.getSimpleName());
return fieldsAppliesVo.getFieldId();
// 场地 sql
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
LinkedList<Object[]> fieldUpdateObjs = CollectionUtil.linkedListObjectArr();
toMqSqls.add(SqlMapping.get("merchant_fields.update_is_check"));
fieldUpdateObjs.add(new Object[]{
fieldsVo.getIsCheck(), fieldsVo.getUpdatedAt(), fieldsVo.getFieldId()
});
// mq
s = System.currentTimeMillis();
queueUtils.sendMsgByRedis(
MQConst.MerchantQueue.SQL_MERCHANT_FIELD.getKey(),
SqlMapping.gets(toMqSqls, fieldUpdateObjs)
);
log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s);
}
}
package com.liquidnet.service.merchant.util;
import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.merchant.dto.vo.MerchantFieldsAppliesVo;
import com.liquidnet.service.merchant.dto.vo.MerchantFieldsVo;
import com.mongodb.BasicDBObject;
import java.util.ArrayList;
......@@ -8,12 +10,20 @@ import java.util.ArrayList;
public class ObjectUtil {
private static final ArrayList<MerchantFieldsAppliesVo> merchantFieldsAppliesVoArrayList = new ArrayList<>();
private static final PagedResult<MerchantFieldsVo> merchantFieldsVoPagedResult = new PagedResult<>();
private static final BasicDBObject basicDBObject = new BasicDBObject();
public static ArrayList<MerchantFieldsAppliesVo> getMerchantFieldsAppliesVoArrayList() {
return (ArrayList<MerchantFieldsAppliesVo>) merchantFieldsAppliesVoArrayList.clone();
}
public static PagedResult<MerchantFieldsVo> getMerchantFieldsVoPagedResult() {
return merchantFieldsVoPagedResult.clone();
}
public static BasicDBObject cloneBasicDBObject() {
return (BasicDBObject) basicDBObject.clone();
}
......
# ---------------------------------------------------------------------------------------------------------------------
merchant_fields.update_claim_status=UPDATE merchant_fields SET claim_status = ?, updated_at = ? WHERE field_id = ?
merchant_fields.update_is_check=UPDATE merchant_fields SET is_check = ?, updated_at = ? WHERE field_id = ?
# ---------------------------------------------------------------------------------------------------------------------
merchant_field_applies.insert=INSERT INTO merchant_field_applies (field_apply_id, apply_status, apply_type, reject, uid, field_id, name, logo, background, description, built_date, province_id, province_name, city_id, city_name, district_id, district_name, address, longitude, latitude, contact_name, contact_email, company_name, license_code, license_img, legal_name, legal_identity, legal_identity_obverse, legal_identity_reverse, created_at) VALUE (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
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