server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -64,6 +64,7 @@ public static final String INENTITY_FILES = "INENTITY_FILES"; public static final String MEMBER_FILES = "MEMBER_FILES"; public static final String CATEGORY_FILES = "CATEGORY_FILES"; public static final String ORDERS_FILES = "ORDERS_FILES"; public static boolean WORKORDER_SHE_EMAIL_SENDING = false; public static boolean DEALING_COMPANY_SYNC = false ; public static boolean DEALING_MEMBER_SYNC = false ; @@ -82,7 +83,7 @@ interface CacheKey { } public interface RedisKeys { public static final String IMPORTING_CATEGORY = "IMPORTING_CATEGORY"; public static final String ORDER_CODE = "ORDER_CODE"; } /** * æä½ç±»åï¼ç¨äºåæ¥å£éªè¯åç» server/services/src/main/java/com/doumee/core/utils/GeoUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.doumee.core.utils; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2025/7/15 9:57 */ public class GeoUtils { // å°è§åº¦è½¬æ¢ä¸ºå¼§åº¦ private static double toRadians(double angle) { return angle * Math.PI / 180.0; } // 计ç®ä¸¤ç¹é´çè·ç¦»ï¼åä½ï¼å ¬éï¼ public static double haversineDistance(double lat1, double lon1, double lat2, double lon2) { // å°ç»çº¬åº¦è½¬æ¢ä¸ºå¼§åº¦ double dLat = toRadians(lat2 - lat1); double dLon = toRadians(lon2 - lon1); lat1 = toRadians(lat1); lat2 = toRadians(lat2); // åºç¨Haversineå ¬å¼ double a = Math.pow(Math.sin(dLat / 2), 2) + Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2); double c = 2 * Math.asin(Math.sqrt(a)); // å°çåå¾ï¼åä½ï¼å ¬é int R = 6371; return R * c; } public static void main(String[] args) { double lat1 = 30.660622; // 纽约纬度 double lon1 = 114.172; // 纽约ç»åº¦ double lat2 = 30.621857; // æ´æç¶çº¬åº¦ double lon2 = 114.12311; // æ´æç¶ç»åº¦ double distance = haversineDistance(lat1, lon1, lat2, lon2); System.out.printf("Distance: %.2f km%n", distance); } } server/services/src/main/java/com/doumee/core/utils/redis/RedisConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,61 @@ package com.doumee.core.utils.redis; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * @author jiangping * @date 2021-8-10 14:40:35 * redisé ç½® */ @Configuration public class RedisConfig { @Bean @SuppressWarnings("all") public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<String, Object>(); template.setConnectionFactory(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // keyéç¨Stringçåºååæ¹å¼ template.setKeySerializer(stringRedisSerializer); // hashçkeyä¹éç¨Stringçåºååæ¹å¼ template.setHashKeySerializer(stringRedisSerializer); // valueåºååæ¹å¼éç¨jackson template.setValueSerializer(jackson2JsonRedisSerializer); // hashçvalueåºååæ¹å¼éç¨jackson template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } } /*@Configuration public class RedisConfig { *//** * @param factory * @return èªå®ä¹redisTemplateï¼èªå¸¦çbean没æåºååå¨ *//* @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(factory); redisTemplate.setKeySerializer(new StringRedisSerializer());//设置keyçåºååå¨ redisTemplate.setValueSerializer(new RedisConverter());//设置å¼çåºååå¨ return redisTemplate; } }*/ server/services/src/main/java/com/doumee/core/utils/redis/RedisConverter.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ package com.doumee.core.utils.redis; import org.springframework.core.convert.converter.Converter; import org.springframework.core.serializer.support.DeserializingConverter; import org.springframework.core.serializer.support.SerializingConverter; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.SerializationException; /** * @author å½ä¼ * @date 2018/8/28 9:31 */ public class RedisConverter implements RedisSerializer<Object> { private Converter<Object, byte[]> serializer = new SerializingConverter();//åºååå¨ private Converter<byte[], Object> deserializer = new DeserializingConverter();//ååºååå¨ @Override public byte[] serialize(Object o) throws SerializationException {//å°å¯¹è±¡åºååæåèæ°ç» if (o == null) return new byte[0]; try { return serializer.convert(o); } catch (Exception e) { e.printStackTrace(); return new byte[0]; } } @Override public Object deserialize(byte[] bytes) throws SerializationException {//å°åèæ°ç»ååºååæå¯¹è±¡ if (bytes == null || bytes.length == 0) return null; try { return deserializer.convert(bytes); } catch (Exception e) { e.printStackTrace(); return null; } } } server/services/src/main/java/com/doumee/core/utils/redis/RedisUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,86 @@ package com.doumee.core.utils.redis; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import java.util.concurrent.TimeUnit; public class RedisUtil { /** * æ·»å ä¸ä¸ªValue为String * @param stringRedisTemplate * @param key * @param str */ public static void addString( StringRedisTemplate stringRedisTemplate, String key, String str) { //1,æ·»å ä¸ä¸ªValue为String stringRedisTemplate.opsForValue().set(key, str); } /** * æ ¹æ®keyå é¤å符串ç¼å * @param stringRedisTemplate * @param key */ public static void delString( StringRedisTemplate stringRedisTemplate, String key ) { //1,æ·»å ä¸ä¸ªValue为String stringRedisTemplate.delete(key); } /** * æ ¹æ®keyå é¤å¯¹è±¡æ°æ® * @param redisTemplate * @param key */ public static void deleteObject( RedisTemplate<String, Object> redisTemplate , String key ) { redisTemplate.delete(key); } /** * æ·»å ä¸ä¸ªValue为对象 * @param redisTemplate * @param key * @param obj */ public static void addObject(RedisTemplate<String, Object> redisTemplate , String key, Object obj) { redisTemplate.opsForValue().set(key, obj); } /** * æ·»å ä¸ä¸ªValue为对象 * @param redisTemplate * @param key * @param obj */ public static void addObject(RedisTemplate<String, Object> redisTemplate , String key, Object obj,long time) { // redisTemplate.opsForValue().set(key, obj); redisTemplate.opsForValue().set(key,obj,time, TimeUnit.SECONDS); } /** * æ ¹æ®åæ°å¯¹è±¡ç±»åï¼è¿åç¸åºç¼åå¯¹è±¡æ°æ® * @param stringRedisTemplate * @param key * @return */ public static String getString(StringRedisTemplate stringRedisTemplate, String key){ String val = stringRedisTemplate.opsForValue().get(key); return val; } /** * æ ¹æ®åæ°å¯¹è±¡ç±»åï¼è¿åç¸åºç¼åå¯¹è±¡æ°æ® * @param redisTemplate * @param key * @param clazz * @param <T> * @return */ public static <T> T getObject(RedisTemplate<String, Object> redisTemplate , String key,Class<T> clazz){ T t = (T) redisTemplate.opsForValue().get(key); return t; } } server/services/src/main/java/com/doumee/dao/business/OrdersMapper.java
@@ -2,11 +2,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.doumee.dao.business.model.Orders; import com.github.yulichang.base.MPJBaseMapper; /** * @author æ±è¹è¹ * @date 2025/07/09 12:00 */ public interface OrdersMapper extends BaseMapper<Orders> { public interface OrdersMapper extends MPJBaseMapper<Orders> { } server/services/src/main/java/com/doumee/dao/business/model/Member.java
@@ -156,7 +156,6 @@ @ExcelColumn(name="æ¯å¦æ¥åèªå¨æ´¾å:0=å¦ï¼1=æ¯ï¼") private Integer autoReceiveStatus; @ApiModelProperty(value = "å½å使ç¨èº«ä»½:0=ç¨å·¥å叿¹;1=ç¨å·¥æ¥åæ¹;", example = "1") @ExcelColumn(name="å½å使ç¨èº«ä»½:0=ç¨å·¥å叿¹;1=ç¨å·¥æ¥åæ¹;") private Integer useIdentity; @@ -174,4 +173,20 @@ @TableField(exist = false) private Integer type; @ApiModelProperty(value = "头åå ¨è·¯å¾") @TableField(exist = false) private String fullCoverImage; @ApiModelProperty(value = "ç¨å·¥èº«ä»½", example = "1") @TableField(exist = false) private IdentityInfo workerIdentityModel; @ApiModelProperty(value = "叿ºèº«ä»½ä¿¡æ¯", example = "1") @TableField(exist = false) private IdentityInfo driverIdentityModel; @ApiModelProperty(value = "éé¤èº«ä»½ä¿¡æ¯", example = "1") @TableField(exist = false) private IdentityInfo chefIdentityModel; } server/services/src/main/java/com/doumee/dao/business/model/MemberRevenue.java
@@ -103,4 +103,7 @@ @TableField(exist = false) @ExcelColumn(name="ç¨æ·openid" ,index = 1,width = 6) private String openid; @ApiModelProperty(value = "ç¨å·¥ç±»å:0=éæå·¥;1=忣工;2=å è£ å·¥", example = "1") @TableField(exist = false) private Integer workType; } server/services/src/main/java/com/doumee/dao/business/model/Orders.java
@@ -261,11 +261,26 @@ @TableField(exist = false) private List<CateringDTO> cateringDTOList; @ApiModelProperty(value = "ç§»å¨ç«¯ç¨æ·",hidden = true) @TableField(exist = false) private Member member; @ApiModelProperty(value = "æ¥è¯¢æç订åï¼0=ååæ¹è®¢åï¼1=æ¥åæ¹è®¢åï¼2=æ¥å大å ï¼", example = "1") @TableField(exist = false) private Integer queryMyOrderType; @ApiModelProperty(value = "éæ±ç±»å") @TableField(exist = false) private String categoryName; @ApiModelProperty(value = "è¿è¾åç§") @TableField(exist = false) private String transportTypeName; @ApiModelProperty(value = "è·ç¦» åä½km") @TableField(exist = false) private double distance; } server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.doumee.dao.dto; import com.doumee.dao.business.model.Member; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/3/23 9:50 */ @Data @ApiModel("æç°ç³è¯·") public class WithdrawalDTO { @ApiModelProperty(value = "æç°éé¢ (åä½ï¼å)") private Long amount; @ApiModelProperty(value = "ç¨æ·ä¿¡æ¯",hidden = true) private Member member; } server/services/src/main/java/com/doumee/service/business/OrdersService.java
@@ -126,4 +126,8 @@ String payNotify(String preOrderId,String paymentNo); void platformCancel(Integer orderId, LoginUserInfo loginUserInfo); PageData<Orders> findPageForMini(PageWrap<Orders> pageWrap); Orders getDetail(Integer id,Integer userType); } server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java
@@ -3,6 +3,8 @@ import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.WithdrawalOrders; import com.doumee.dao.dto.WithdrawalDTO; import java.util.List; /** @@ -94,4 +96,7 @@ * @return long */ long count(WithdrawalOrders withdrawalOrders); void applyWithdrawal(WithdrawalDTO withdrawalDTO); } server/services/src/main/java/com/doumee/service/business/impl/MemberRevenueServiceImpl.java
@@ -7,6 +7,7 @@ import com.doumee.dao.business.MemberRevenueMapper; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.MemberRevenue; import com.doumee.dao.business.model.Orders; import com.doumee.service.business.MemberRevenueService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -97,7 +98,9 @@ .selectAs(Member::getName,MemberRevenue::getMemberName) .selectAs(Member::getNickName,MemberRevenue::getMemberNickname) .selectAs(Member::getTelephone,MemberRevenue::getMemberPhone) .leftJoin(Member.class,Member::getId,MemberRevenue::getMemberId); .selectAs(Orders::getWorkType,MemberRevenue::getWorkType) .leftJoin(Member.class,Member::getId,MemberRevenue::getMemberId) .leftJoin(Orders.class,Orders::getId,MemberRevenue::getObjId); Utils.MP.blankToNull(pageWrap.getModel()); pageWrap.getModel().setDeleted(Constants.ZERO); queryWrapper.eq(pageWrap.getModel().getId() != null,MemberRevenue::getId, pageWrap.getModel().getId()); server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -12,7 +12,9 @@ import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.GeoUtils; import com.doumee.core.utils.Utils; import com.doumee.core.utils.redis.RedisUtil; import com.doumee.dao.business.*; import com.doumee.dao.business.model.*; import com.doumee.dao.dto.*; @@ -21,14 +23,17 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.wechat.pay.java.service.partnerpayments.jsapi.model.Amount; import com.wechat.pay.java.service.partnerpayments.jsapi.model.Payer; import com.wechat.pay.java.service.partnerpayments.jsapi.model.PrepayRequest; import com.wechat.pay.java.service.partnerpayments.jsapi.model.PrepayWithRequestPaymentResponse; import jodd.util.StringUtil; import nonapi.io.github.classgraph.json.Id; import org.apache.poi.sl.image.ImageHeaderEMF; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -70,7 +75,13 @@ private MemberRevenueMapper memberRevenueMapper; @Autowired private IdentityInfoMapper identityInfoMapper; @Autowired private WxMiniUtilService wxMiniUtilService; @Autowired private RedisTemplate<String, Object> redisTemplate; @Override @Transactional(rollbackFor = {Exception.class,BusinessException.class}) @@ -79,8 +90,8 @@ this.initVerification(orders); orders.setCreateTime(new Date()); orders.setPayStatus(Constants.ZERO); //TODO 订åç¼å·è§å //订åç¼å· orders.setCode(this.getNextCode(orders.getType())); Category category = categoryMapper.selectOne(new QueryWrapper<Category>().lambda() .eq(Category::getDeleted,Constants.ZERO).eq(Category::getType,Constants.THREE) .eq(Category::getName,orders.getType()) @@ -1133,4 +1144,182 @@ return ("å¤çæå!"); } @Override public PageData<Orders> findPageForMini(PageWrap<Orders> pageWrap) { IPage<Orders> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper<Orders> queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); Orders model = pageWrap.getModel(); queryWrapper.selectAll(Orders.class) .select("c1.name",Orders::getCategoryName) .select("c2.name",Orders::getTransportTypeName) .leftJoin(" category c1 on t.category_id = c1.id ") .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id "); if(Objects.nonNull(model.getQueryMyOrderType())){ if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ZERO)){ //ååæ¹ æç订å queryWrapper.eq(Orders::getReleaseMemberId,model.getMember().getId()); }else if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ONE)){ //æ¥åæ¹ æç订å queryWrapper.eq(Orders::getAcceptMemberId,model.getMember().getId()); }else{ //æ¥å大å queryWrapper.and(i-> i.eq(Constants.equalsInteger(model.getMember().getWorkerIdentity(),Constants.TWO),Orders::getType,Constants.ZERO) .or() .eq(Constants.equalsInteger(model.getMember().getDriverIdentity(),Constants.TWO),Orders::getType,Constants.ONE) .or() .eq(Constants.equalsInteger(model.getMember().getChefIdentity(),Constants.TWO),Orders::getType,Constants.TWO) ); queryWrapper.eq(Orders::getStatus,Constants.ONE); } } for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } IPage<Orders> iPage = ordersMapper.selectJoinPage(page,Orders.class,queryWrapper); if(Objects.nonNull(model.getQueryMyOrderType())&&Constants.equalsInteger(model.getQueryMyOrderType(),Constants.TWO)){ if(Constants.equalsInteger(model.getMember().getUseIdentity(),Constants.ONE)){ model.getMember().setWorkerIdentityModel( identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,model.getMember().getId()) .eq(IdentityInfo::getType,Constants.ZERO) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ) ); model.getMember().setDriverIdentityModel( identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,model.getMember().getId()) .eq(IdentityInfo::getType,Constants.ONE) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ) ); model.getMember().setChefIdentityModel( identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,model.getMember().getId()) .eq(IdentityInfo::getType,Constants.TWO) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ) ); } for (Orders orders:iPage.getRecords()) { this.getDistance(model.getMember(),orders); } } return PageData.from(iPage); } //å®ä½è·ç¦» public void getDistance(Member member,Orders orders){ if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ if(Objects.nonNull(member.getWorkerIdentityModel())&&Objects.nonNull(member.getWorkerIdentityModel().getLgt()) &&Objects.nonNull(member.getWorkerIdentityModel().getLat())){ orders.setDistance( GeoUtils.haversineDistance( orders.getLgt().doubleValue(),orders.getLat().doubleValue(), member.getWorkerIdentityModel().getLgt().doubleValue(), member.getWorkerIdentityModel().getLat().doubleValue() ) ); } }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ if(Objects.nonNull(member.getDriverIdentityModel())&&Objects.nonNull(member.getDriverIdentityModel().getLgt()) &&Objects.nonNull(member.getDriverIdentityModel().getLat())) { orders.setDistance( GeoUtils.haversineDistance( orders.getLgt().doubleValue(), orders.getLat().doubleValue(), member.getDriverIdentityModel().getLgt().doubleValue(), member.getDriverIdentityModel().getLat().doubleValue() ) ); } }else{ if(Objects.nonNull(member.getChefIdentityModel())&&Objects.nonNull(member.getChefIdentityModel().getLgt()) &&Objects.nonNull(member.getChefIdentityModel().getLat())) { orders.setDistance( GeoUtils.haversineDistance( orders.getLgt().doubleValue(),orders.getLat().doubleValue(), member.getChefIdentityModel().getLgt().doubleValue(), member.getChefIdentityModel().getLat().doubleValue() ) ); } } } @Override public Orders getDetail(Integer id,Integer userType) { Orders orders = ordersMapper.selectJoinOne(Orders.class,new MPJLambdaWrapper<Orders>() .selectAll(Orders.class) .select("c1.name",Orders::getCategoryName) .select("c2.name",Orders::getTransportTypeName) .leftJoin(" category c1 on t.category_id = c1.id ") .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id ") .eq(Orders::getId,id) ); if(Objects.isNull(orders)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(Objects.nonNull(userType)){ Member member = memberMapper.selectById( Constants.equalsInteger(userType,Constants.ZERO)?orders.getReleaseMemberId():orders.getAcceptMemberId() ); if(Objects.nonNull(member)){ if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getCoverImage())){ //头åä¿¡æ¯ String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode(); member.setFullCoverImage(path + member.getCoverImage()); } orders.setMember(member); } } List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,orders.getId()) .eq(Multifile::getIsdeleted,Constants.ZERO).eq(Multifile::getObjType,Constants.ONE).orderByAsc(Multifile::getId)); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ORDERS_FILES).getCode(); for (Multifile multifile:multifileList) { multifile.setFileurlFull(path + multifile.getFileurl()); } orders.setMultifileList(multifileList); } return orders; } public synchronized String getNextCode(Integer type){ String prefix = "YG"; if(!Constants.equalsInteger(type,Constants.ZERO)){ prefix = (Constants.equalsInteger(type,Constants.ONE)?"YC-":"SC-"); } prefix = DateUtil.getDate(new Date(),"yyyyMMdd") +"-"; Integer countNum = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.ORDER_CODE, Integer.class); countNum = Constants.formatIntegerNum(countNum)+1; //æ´æ°ç¼å RedisUtil.addObject(redisTemplate,Constants.RedisKeys.ORDER_CODE,countNum); String nextIndex =Integer.toString( countNum ); return prefix + org.apache.commons.lang3.StringUtils.leftPad(nextIndex,3,"0"); } } server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -1,10 +1,18 @@ package com.doumee.service.business.impl; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Utils; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.MemberRevenueMapper; import com.doumee.dao.business.WithdrawalOrdersMapper; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.MemberRevenue; import com.doumee.dao.business.model.WithdrawalOrders; import com.doumee.dao.dto.WithdrawalDTO; import com.doumee.service.business.WithdrawalOrdersService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,9 +20,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; import java.util.Objects; /** * æç°ç³è¯·è®°å½Serviceå®ç° @@ -26,6 +37,12 @@ @Autowired private WithdrawalOrdersMapper withdrawalOrdersMapper; @Autowired private MemberMapper memberMapper; @Autowired private MemberRevenueMapper memberRevenueMapper; @Override public Integer create(WithdrawalOrders withdrawalOrders) { @@ -146,4 +163,49 @@ QueryWrapper<WithdrawalOrders> wrapper = new QueryWrapper<>(withdrawalOrders); return withdrawalOrdersMapper.selectCount(wrapper); } /************************************ç§»å¨ç«¯æ¥å£*******************************************/ /** * æç°ç³è¯· * @param withdrawalDTO */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void applyWithdrawal(WithdrawalDTO withdrawalDTO){ if(Objects.isNull(withdrawalDTO) || Objects.isNull(withdrawalDTO.getAmount())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } Member member = memberMapper.selectById(withdrawalDTO.getMember().getId()); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"ç¨æ·ä¿¡æ¯å¼å¸¸,请è系管çå"); } if(member.getAmount() < withdrawalDTO.getAmount()){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对ä¸èµ·ï¼å¯æç°ä½é¢ä¸è¶³ã"); } WithdrawalOrders withdrawalOrders = new WithdrawalOrders(); withdrawalOrders.setCreateTime(new Date()); withdrawalOrders.setMemberId(member.getId()); withdrawalOrders.setAmount(withdrawalDTO.getAmount()); withdrawalOrders.setStatus(Constants.ZERO); withdrawalOrders.setType(Constants.ZERO); //TODO åèµ·æç°ç³è¯· //æ´æ°ç¨æ·ä½é¢ //å卿µæ°´è®°å½ } } server/web/src/main/java/com/doumee/api/web/OrdersApi.java
@@ -4,9 +4,12 @@ import com.doumee.core.annotation.LoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.IdentityInfo; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Orders; import com.doumee.dao.dto.CommentDTO; import com.doumee.dao.dto.ConfirmUpdOrderDTO; import com.doumee.dao.dto.DoneOrderDTO; import com.doumee.dao.dto.UpdOrderDataDTO; @@ -18,6 +21,7 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -136,7 +140,7 @@ @LoginRequired @ApiOperation(value = "å®æè®¢å - ååæ¹", notes = "å°ç¨åºç«¯") @GetMapping("/doneOrder") @PostMapping("/doneOrder") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) @@ -146,5 +150,38 @@ } @LoginRequired @ApiOperation(value = "订åè¯ä»· - ååæ¹", notes = "å°ç¨åºç«¯") @PostMapping("/comment") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse comment(@RequestBody CommentDTO commentDTO) { commentDTO.setMember(this.getMemberResponse()); ordersService.comment(commentDTO); return ApiResponse.success("æä½æå"); } @LoginRequired @ApiOperation("å页æ¥è¯¢") @PostMapping("/page") public ApiResponse<PageData<Orders>> findPage (@RequestBody PageWrap<Orders> pageWrap) { pageWrap.getModel().setMember(this.getMemberResponse()); return ApiResponse.success(ordersService.findPageForMini(pageWrap)); } @LoginRequired @ApiOperation(value = "订å详æ ", notes = "å°ç¨åºç«¯") @GetMapping("/getDetail") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse<Orders> getDetail(@RequestParam Integer orderId) { return ApiResponse.success("æä½æå",ordersService.getDetail(orderId,this.getMemberResponse().getUseIdentity())); } } server/web/src/main/java/com/doumee/api/web/UserApi.java
@@ -3,17 +3,23 @@ import com.doumee.core.annotation.LoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.IdentityInfo; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.MemberRevenue; import com.doumee.dao.dto.WxPhoneRequest; import com.doumee.dao.vo.AccountResponse; import com.doumee.service.business.IdentityInfoService; import com.doumee.service.business.MemberRevenueService; import com.doumee.service.business.MemberService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -37,8 +43,11 @@ @Autowired private IdentityInfoService identityInfoService; @Autowired private MemberRevenueService memberRevenueService; @LoginRequired @ApiOperation(value = "ç¼è¾ä¸ªäººä¿¡æ¯", notes = "å°ç¨åºç«¯") @ApiOperation(value = "è·å个人信æ¯", notes = "å°ç¨åºç«¯") @GetMapping("/getMemberInfo") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), @@ -124,4 +133,15 @@ return ApiResponse.success("æä½æå"); } @LoginRequired @ApiOperation("ä½é¢æç»") @PostMapping("/revenuePage") public ApiResponse<PageData<MemberRevenue>> revenuePage (@RequestBody PageWrap<MemberRevenue> pageWrap) { pageWrap.getModel().setMemberId(this.getMemberId()); return ApiResponse.success(memberRevenueService.findPage(pageWrap)); } }