拖动排序

This commit is contained in:
2026-04-28 17:37:50 +08:00
parent d8b8b55e7a
commit e823cb7e6b
4 changed files with 78 additions and 32 deletions

View File

@@ -11,6 +11,7 @@ import com.czg.account.entity.ShopPayType;
import com.czg.account.service.ShopPayTypeService;
import com.czg.service.account.mapper.ShopPayTypeMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@@ -24,11 +25,11 @@ import java.util.List;
@Service
public class ShopPayTypeServiceImpl extends ServiceImpl<ShopPayTypeMapper, ShopPayType> implements ShopPayTypeService{
private final ArrayList<ShopPayType> payTypeArrayList = new ArrayList<>(){{
add(new ShopPayType().setPayType("cash").setPayName("现金").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/319005ffef734aa6a88d432459fa59d8.png"));
add(new ShopPayType().setPayType("bank").setPayName("银行卡").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/98e6199cc61a480b9c63617600b2f2fe.png"));
add(new ShopPayType().setPayType("scanCode").setPayName("扫码支付").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/3a344b46638547df81d5857a3c8cac66.png"));
add(new ShopPayType().setPayType("deposit").setPayName("储值卡").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/6f778df10ea74142a6cba310c2a19063.png"));
add(new ShopPayType().setPayType("virtual").setPayName("挂账支付").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/6f778df10ea74142a6cba310c2a19063.png").setIsShowShortcut(0));
add(new ShopPayType().setPayType("cash").setPayName("现金").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/319005ffef734aa6a88d432459fa59d8.png").setSorts(1));
add(new ShopPayType().setPayType("bank").setPayName("银行卡").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/98e6199cc61a480b9c63617600b2f2fe.png").setSorts(2));
add(new ShopPayType().setPayType("scanCode").setPayName("扫码支付").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/3a344b46638547df81d5857a3c8cac66.png").setSorts(3));
add(new ShopPayType().setPayType("deposit").setPayName("储值卡").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/6f778df10ea74142a6cba310c2a19063.png").setSorts(4));
add(new ShopPayType().setPayType("virtual").setPayName("挂账支付").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/6f778df10ea74142a6cba310c2a19063.png").setIsShowShortcut(0).setSorts(5));
}};
@Override
@@ -44,6 +45,50 @@ public class ShopPayTypeServiceImpl extends ServiceImpl<ShopPayTypeMapper, ShopP
});
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateSort(Long shopId, Integer payTypeId, Integer targetSort) {
// 1. 查询当前拖动的项
ShopPayType current = getById(payTypeId);
if (current == null) {
throw new RuntimeException("支付类型不存在");
}
Integer oldSort = current.getSorts();
// 如果位置没变,不处理
if (oldSort.equals(targetSort)) {
return;
}
// 2. 查询同店铺下所有支付类型(按排序升序)
QueryWrapper wrapper = QueryWrapper.create()
.eq(ShopPayType::getShopId, shopId)
.orderBy(ShopPayType::getSorts, true);
List<ShopPayType> list = list(wrapper);
// 3. 重新排序(核心算法)
for (int i = 0; i < list.size(); i++) {
ShopPayType item = list.get(i);
if (item.getId().equals(payTypeId)) {
// 当前拖动项,设置目标排序
item.setSorts(targetSort);
} else if (oldSort < targetSort) {
// 向下拖动:原排序 < 目标排序 → 中间项排序 -1
if (item.getSorts() > oldSort && item.getSorts() <= targetSort) {
item.setSorts(item.getSorts() - 1);
}
} else {
// 向上拖动:原排序 > 目标排序 → 中间项排序 +1
if (item.getSorts() < oldSort && item.getSorts() >= targetSort) {
item.setSorts(item.getSorts() + 1);
}
}
}
// 4. 批量更新排序
updateBatch(list);
}
@Override
public List<ShopPayType> getList(Long shopId) {
List<ShopPayType> list = list(new QueryWrapper().eq(ShopPayType::getShopId, StpKit.USER.getShopId()));