package com.yami.trading.api.controller; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.yami.trading.api.dto.OptionalListCount; import com.yami.trading.api.dto.UserOptionalListDto; import com.yami.trading.bean.item.domain.ItemUserOptionalItem; import com.yami.trading.bean.item.domain.ItemUserOptionalList; import com.yami.trading.bean.item.dto.ItemUserOptionalDTO; import com.yami.trading.bean.item.dto.ItemUserOptionalItemDTO; import com.yami.trading.bean.item.dto.ItemUserOptionalListDTO; import com.yami.trading.bean.item.dto.ItemUserOptionalListUpdateDTO; import com.yami.trading.bean.item.mapstruct.ItemUserOptionalListWrapper; import com.yami.trading.bean.item.query.ItemUserOptionalListQuery; import com.yami.trading.bean.rate.domain.ExchangeRate; import com.yami.trading.bean.rate.dto.ExchangeRateDTO; import com.yami.trading.bean.rate.mapstruct.ExchangeRateWrapper; import com.yami.trading.common.domain.Result; import com.yami.trading.common.util.StringUtils; import com.yami.trading.security.common.util.SecurityUtils; import com.yami.trading.service.item.ItemService; import com.yami.trading.service.item.ItemUserOptionalItemService; import com.yami.trading.service.item.ItemUserOptionalListService; import com.yami.trading.service.item.ItemUserOptionalService; import com.yami.trading.service.rate.ExchangeRateService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; /** * 自选分组Controller * * @author lucas * @version 2023-03-10 */ @Api(tags = "自选分组") @RestController @RequestMapping(value = "api/item/itemUserOptionalList") public class ApiItemUserOptionalListController { @Autowired private ItemUserOptionalListService itemUserOptionalListService; @Autowired private ItemUserOptionalListWrapper itemUserOptionalListWrapper; @Autowired private ItemUserOptionalService itemUserOptionalService; @Autowired private ItemUserOptionalItemService itemUserOptionalItemService; @Autowired private ItemService itemService; @Autowired private ExchangeRateService exchangeRateService; @Autowired private ExchangeRateWrapper exchangeRateWrapper; /** * 自选分组列表数据 */ @ApiOperation(value = "我的自选,分组列表,默认会显示聚合信息") @GetMapping("list") public Result list(ItemUserOptionalListQuery itemUserOptionalListQuery, Page page) throws Exception { Map maps = Maps.newHashMap(); maps.put("zh-CN","我的自选"); maps.put("CN","我的自選"); maps.put("en","My Choice"); maps.put("Japanese","私の選択"); maps.put("Korean","내 선택\n"); maps.put("de","meine Wahl"); maps.put("fr","mon choix"); maps.put("vi","lựa chọn của tôi"); maps.put("Italy","la mia scelta"); maps.put("th","ตัวเลือกของฉัน"); String lang = itemUserOptionalListQuery.getLanguage(); if(StringUtils.isEmptyString(lang)){ lang = "en"; } String partyId = SecurityUtils.getCurrentUserId(); if(StringUtils.isEmptyString(partyId)){ UserOptionalListDto model = new UserOptionalListDto(); model.setList(Lists.newArrayList()); model.setCount(Maps.newHashMap()); return Result.succeed(model); } UserOptionalListDto dto = new UserOptionalListDto(); List optionalListCountList = new ArrayList<>(); Set symbols = new HashSet<>(); // 先查询我的自选币对列表 List optionalSymbols = itemUserOptionalService.getOptionalSymbols(partyId); symbols.addAll(optionalSymbols); optionalListCountList.add(new OptionalListCount("0", maps.getOrDefault(lang, "my choice"), "", optionalSymbols.size())); // 查询我的自选分组,查询每个分组,有的币对。可以统计出每个分组的数量 List list = itemUserOptionalListService.findListByPartyId(partyId); for (ItemUserOptionalList itemUserOptionalList : list) { List listSymbols = itemUserOptionalItemService.findListByPartyId(partyId, itemUserOptionalList.getUuid()); optionalListCountList.add(new OptionalListCount(itemUserOptionalList.getUuid(), itemUserOptionalList.getName(), itemUserOptionalList.getCurrency(), listSymbols.size())); symbols.addAll(listSymbols); } dto.setList(optionalListCountList); dto.setCount(itemService.typeCountGroupByType(symbols)); return Result.succeed(dto); } @ApiOperation(value = "获取新增自选组时候的币种列表") @GetMapping("listExchanges") public Result> listExchanges() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("DISTINCT CURRENCY,NAME"); List list = exchangeRateService.list(queryWrapper); return Result.ok(exchangeRateWrapper.toDTO(list)); } /** * 根据分组id获取分组下的币对列表 */ @ApiOperation(value = "根据Id获取自选分组数据") @GetMapping("listItemsById") public Result> queryById(String id) { List list = new ArrayList<>(); String partyId = SecurityUtils.getCurrentUserId(); if ("0".equalsIgnoreCase(id)) { List itemUserOptionals = itemUserOptionalService.getItemUserOptionals(null, partyId); list = BeanUtil.copyToList(itemUserOptionals, ItemUserOptionalItemDTO.class); } else { list = itemUserOptionalListService.findListItemsByPartyId(partyId, id); } return Result.succeed(list); } /** * 根据type获取分组下的币对列表 */ @ApiOperation(value = "根据type获取自选分组数据") @GetMapping("listItemsByType") public Result> listItemsByType(String type) { List list = new ArrayList<>(); String partyId = SecurityUtils.getUser().getUserId(); list = itemUserOptionalListService.findListItemsByPartyIdAndType(partyId, type); return Result.succeed(list); } /** * 保存自选分组 */ @ApiOperation(value = "新增自选分组") @PostMapping("save") public Result save(@Valid ItemUserOptionalListDTO itemUserOptionalListDTO) { String partyId = SecurityUtils.getUser().getUserId(); if (itemUserOptionalListService.findOne(partyId, itemUserOptionalListDTO.getName()) != null) { return Result.failed("该自选组名称已经使用"); } //新增或编辑表单保存 ItemUserOptionalList entity = itemUserOptionalListWrapper.toEntity(itemUserOptionalListDTO); entity.setPartyId(partyId); itemUserOptionalListService.save(entity); return Result.succeed("保存自选分组成功"); } /** * 保存自选到分组 */ @ApiOperation(value = "将一个币对加入一个分组") @GetMapping("saveItem") public Result saveItem(String listId, String symbol) { String partyId = SecurityUtils.getUser().getUserId(); if (itemUserOptionalItemService.findOne(partyId, listId, symbol) != null) { return Result.failed("已经添加过该分组了"); } ItemUserOptionalItem itemUserOptionalItem = new ItemUserOptionalItem(); itemUserOptionalItem.setListId(listId); itemUserOptionalItem.setSymbol(symbol); itemUserOptionalItem.setPartyId(partyId); itemUserOptionalItemService.save(itemUserOptionalItem); return Result.succeed("保存自选分组成功"); } /** * 保存自选到分组 */ @ApiOperation(value = "判断币对是否已经加入分组") @GetMapping("isItemHasAdd") public Result isItemHasAdd(String listId, String symbol) { String partyId = SecurityUtils.getUser().getUserId(); if (itemUserOptionalItemService.findOne(partyId, listId, symbol) != null) { return Result.succeed(true); } return Result.succeed(false); } /** * 保存自选到分组 */ @ApiOperation(value = "判断币对是否已经被全局加入某个分组") @GetMapping("isItemHasAddGlobal") public Result isItemHasAddGlobal(String symbol) { String partyId = SecurityUtils.getCurrentUserId(); if(StringUtils.isEmptyString(partyId)){ return Result.succeed(false); } if (itemUserOptionalItemService.findOne(partyId, symbol)) { return Result.succeed(true); } return Result.succeed(false); } @ApiOperation(value = "将一个币对从分组移除") @GetMapping("removeItem") public Result removeItem(String listId, String symbol) { String partyId = SecurityUtils.getUser().getUserId(); ItemUserOptionalItem one = itemUserOptionalItemService.findOne(partyId, listId, symbol); if (one == null) { return Result.succeed("删除成功"); } itemUserOptionalItemService.removeById(one); return Result.succeed("删除成功"); } /** * 保存自选分组 */ @ApiOperation(value = "更新自选分组") @PostMapping("update") public Result update(@Valid ItemUserOptionalListUpdateDTO updateDTO) { String partyId = SecurityUtils.getUser().getUserId(); ItemUserOptionalList one = itemUserOptionalListService.findOne(partyId, updateDTO.getName()); if (one != null && !one.getUuid().equalsIgnoreCase(updateDTO.getUuid())) { return Result.failed("该自选组名称已经使用"); } //新增或编辑表单保存 ItemUserOptionalList entity = BeanUtil.copyProperties(updateDTO, ItemUserOptionalList.class); entity.setPartyId(partyId); itemUserOptionalListService.updateById(entity); return Result.succeed("保存自选分组成功"); } /** * 删除自选分组 */ @ApiOperation(value = "删除自选分组") @GetMapping("delete") public Result delete(String ids) { String idArray[] = ids.split(","); ArrayList list = Lists.newArrayList(idArray); if(list.size() == 0){ return Result.succeed(null, "删除自选分组成功"); } itemUserOptionalListService.removeByIds(list); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("list_id", list); List collect = itemUserOptionalItemService.list(queryWrapper).stream().map(ItemUserOptionalItem::getUuid).collect(Collectors.toList()); itemUserOptionalItemService.removeByIds(collect); return Result.succeed(null, "删除自选分组成功"); } }