浏览代码

1.修改逻辑问题,修复bug

slambb 3 年之前
父节点
当前提交
1ae4cd08cf

+ 6 - 1
src/main/java/com/td/Dawa/BossApplication.java

@@ -178,10 +178,15 @@ class IndexController {
                 excelWorkProService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_WORK_PRO.getMessage());
                 excelPropService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_PROP.getMessage());
                 excelWorkProService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_SCENE.getMessage());
-
                 //生产和资源
                 excelCharacterCreateService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_CREATE.getMessage());
                 excelResourcesService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_RESOURCES.getMessage());
+                //等级
+                excelCharacterLevelService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_LEVEL.getMessage());
+
+                excelCharacterLevelService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_ATTRI.getMessage());
+                //参数
+                excelParameterService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_PARAMETER.getMessage());
 
 
                 //获取本机内网IP

+ 3 - 0
src/main/java/com/td/Dawa/config/enums/GameEnum.java

@@ -19,6 +19,9 @@ public enum GameEnum {
     REDIS_KEY_EXCEL_CHARACTER_COLOR(3,"character_color"),//颜色表key
     REDIS_KEY_EXCEL_CHARACTER_CREATE(4,"character_create"),//生成表key
     REDIS_KEY_EXCEL_RESOURCES(5,"resources"),//资源表key
+    REDIS_KEY_EXCEL_CHARACTER_LEVEL(6,"character_level"),//等级表key
+    REDIS_KEY_EXCEL_PARAMETER(7,"parameter"),//参数表key
+    REDIS_KEY_EXCEL_CHARACTER_ATTRI(8,"character_attri"),//角色属性表key
 
     CHARACTERS_STATE_NORMAL(0,"角色普通状态"),
     CHARACTERS_STATE_TRADE_BANK(1,"角色在交易行状态"),

+ 10 - 4
src/main/java/com/td/Dawa/game/comcharacters/service/ComCharactersServiceImpl.java

@@ -17,6 +17,7 @@ import com.td.Dawa.game.excelcharactercolor.service.ExcelCharacterColorService;
 import com.td.Dawa.game.excelcharactercolor.vo.ExcelCharacterColorClientVo;
 import com.td.Dawa.game.excelcharactercreate.pojo.ExcelCharacterCreate;
 import com.td.Dawa.game.excelcharactercreate.service.ExcelCharacterCreateService;
+import com.td.Dawa.game.excelcharacterlevel.pojo.ExcelCharacterLevel;
 import com.td.Dawa.game.excelcharacterlevel.service.ExcelCharacterLevelService;
 import com.td.Dawa.game.excelcharacterlevel.vo.ExcelCharacterLevelVo;
 import com.td.Dawa.game.excelresources.pojo.ExcelResources;
@@ -141,9 +142,11 @@ public class ComCharactersServiceImpl extends CommonServiceImpl<ComCharactersVo,
         comCharacters.setInteractive(_attr.getInteractive());
         comCharacters.setState(0);
 
+        List<ExcelCharacterLevel> levelList = excelCharacterLevelService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_LEVEL.getMessage());
+
         //设置经验和等级
-        comCharacters.setExp(0);
-        comCharacters.setLevel(1);
+        comCharacters.setExp(levelList.get(0).getExp());
+        comCharacters.setLevel(levelList.get(0).getId());
 
         //随机生成一套model
         List<String> colorIdList = new ArrayList<>();
@@ -168,8 +171,8 @@ public class ComCharactersServiceImpl extends CommonServiceImpl<ComCharactersVo,
 
         ComCharactersClientVo clientVo = CopyUtil.copy(comCharacters, ComCharactersClientVo.class);
         //设置第二级的升级经验
-        ExcelCharacterLevelVo excelCharacterLevelVo = excelCharacterLevelService.getVo(2);
-        clientVo.setLevelUpExp(excelCharacterLevelVo.getExp());
+        ExcelCharacterLevel excelCharacterLevel = levelList.get(1) ;//2级
+        clientVo.setLevelUpExp(excelCharacterLevel.getExp());
 
         clientVo.setSubResourcesClientList(_genList);
 
@@ -209,6 +212,9 @@ public class ComCharactersServiceImpl extends CommonServiceImpl<ComCharactersVo,
         List<ComCharactersClientVo> comCharactersClientVos = comCharactersList.stream().map(e -> {
             ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(e, ComCharactersClientVo.class);
             comCharactersClientVo = addSubResourcesClientListToVO(comCharactersClientVo, e.getModelId(), e.getModelColor());
+            //获取当前的升级等级
+            ExcelCharacterLevel _levelUpExp = excelCharacterLevelService.getNextLevelInfo(comCharactersClientVo.getLevel());
+            comCharactersClientVo.setLevelUpExp(_levelUpExp.getExp());
             return comCharactersClientVo;
         }).collect(Collectors.toList());
         return comCharactersClientVos;

+ 97 - 100
src/main/java/com/td/Dawa/game/comcharactersdiscovery/service/ComCharactersDiscoveryServiceImpl.java

@@ -22,10 +22,14 @@ import com.td.Dawa.game.complayerbackpack.service.ComPlayerBackpackService;
 import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackVo;
 import com.td.Dawa.game.complayersattri.service.ComPlayersAttriService;
 import com.td.Dawa.game.complayersattri.vo.ComPlayersAttriVo;
+import com.td.Dawa.game.comusers.service.ComUsersService;
+import com.td.Dawa.game.comusers.vo.ComUsersVo;
 import com.td.Dawa.game.excelcharactercreate.service.ExcelCharacterCreateService;
+import com.td.Dawa.game.excelcharacterlevel.pojo.ExcelCharacterLevel;
 import com.td.Dawa.game.excelcharacterlevel.service.ExcelCharacterLevelService;
 import com.td.Dawa.game.excelcharacterlevel.vo.ExcelCharacterLevelVo;
 import com.td.Dawa.game.exceldrop.service.ExcelDropService;
+import com.td.Dawa.game.excelparameter.pojo.ExcelParameter;
 import com.td.Dawa.game.excelparameter.service.ExcelParameterService;
 import com.td.Dawa.game.excelparameter.vo.ExcelParameterVo;
 import com.td.Dawa.game.excelprop.pojo.ExcelProp;
@@ -94,6 +98,8 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
     @Autowired
     private ComPlayerBackpackService comPlayerBackpackService;
 
+    @Autowired
+    private ComUsersService comUsersService;
 
     /**
      * 开始工作
@@ -214,6 +220,10 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
                     //log.info(_findCharacter.getProfessional() + "=" + charactersVo.getProfessional());
                     //列表角色和传入的角色做对比
                     if (_findCharacter.getProfessional().equals(charactersVo.getProfessional())) {
+                        //替换时候,重置旧的对象职业
+                        _findCharacter.setProfessional(0);
+                        _findCharacter.setWorkPos(0);
+                        comCharactersService.save(_findCharacter);
                         //如职业一样,替换列表中的角色
                         roleId[i] = charactersVo.getId().toString();
                         isReplace = true;
@@ -320,12 +330,9 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
         if (discoveryVo.getIsWork().equals(GameEnum.WORK_NOT_STARTED.getValue())) {
             throw new AuthorizeException(ResultEnum.EXPLORATION_NOT_START);
         }
-        //todo 经验如何设置
-        List<ExcelParameterVo> parameterVos = excelParameterService.list(new ExcelParameterVo()).getData();
-
-        //todo 获取当前人物等级经验表,待优化
-        List<ExcelCharacterLevelVo> excelCharacterLevelVo = excelCharacterLevelService.list(new ExcelCharacterLevelVo()).getData();
-        //奖励物品的时间计数
+        //获取参数表
+        List<ExcelParameter> parameterVos = excelParameterService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_PARAMETER.getMessage());
+       //奖励物品的时间计数
         String[] _hasDropCounts = StringUtils.hasText(discoveryVo.getRewardCount()) ? discoveryVo.getRewardCount().split("\\|") : new String[0];
         //总共参数的奖励物品
         String[] _allDropIds = StringUtils.hasText(discoveryVo.getRewardCount()) ? discoveryVo.getAllItem().split("\\|") : new String[0];
@@ -446,25 +453,32 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
                                 ExcelPropAndProVo excelPropAndProVo = ProbabilityIntervalUtil.getProp(currentPropAndPros, 100);
                                 _propClientVo = CopyUtil.copy(excelPropAndProVo, ExcelPropClientVo.class);
                                 log.info("随机道具" + _propClientVo.getPropId());
+                                //产生物品,直接添加
+                                _allDropIds = ArrayUtil.append(_allDropIds, _propClientVo.getPropId().toString());
+                                _propClientVo.setItemNum(1);
+                                //这里的时间返回一个开始工作时候和偏移的值
+                                _propClientVo.setCreateTime(DateUtil.offsetSecond(discoveryVo.getWorkStart(), (j + 1) * _miningInterval));
+                                _hasDropCounts = ArrayUtil.append(_hasDropCounts, j + "");//新添加一个挖出的时间
+                                allPropClientVoList.add(_propClientVo);
                             } else {
-                                //剩余获得货币
-                                List<ExcelProp> currencyProp = propList.stream().filter(e -> e.getItemType().equals(1)).collect(Collectors.toList());
-                                //todo 暂时随机两种货币添加
-                                int index = (int) Math.floor(Math.random() * currencyProp.size());
-                                _propClientVo = CopyUtil.copy(currencyProp.get(index), ExcelPropClientVo.class);
-                                log.info("随机道具货币" + _propClientVo.getPropId());
-                                //todo 货币数据未给出,暂定100
-                                //ExcelParameterVo _currency = excelParameterService.getVo(8);
-                                //int _num = (int) Math.round(_currency.getValue());
-                                //discoveryVo.setRewardCurrency(discoveryVo.getRewardCurrency() == null ? _num : discoveryVo.getRewardCurrency() + _num);
+                                ////剩余获得货币
+                                //List<ExcelProp> currencyProp = propList.stream().filter(e -> e.getItemType().equals(1)).collect(Collectors.toList());
+                                ////todo 暂时随机两种货币添加
+                                //int index = (int) Math.floor(Math.random() * currencyProp.size());
+                                //_propClientVo = CopyUtil.copy(currencyProp.get(index), ExcelPropClientVo.class);
+                                //log.info("随机道具货币" + _propClientVo.getPropId());
+                                ////todo 货币数据未给出,暂定100
+                                ExcelParameterVo _currency = excelParameterService.getVo(8);
+                                int _num = (int) Math.round(_currency.getValue());
+                                discoveryVo.setRewardCurrency(discoveryVo.getRewardCurrency() == null ? _num : discoveryVo.getRewardCurrency() + _num);
                             }
-                            //产生物品,直接添加
-                            _allDropIds = ArrayUtil.append(_allDropIds, _propClientVo.getPropId().toString());
-                            _propClientVo.setItemNum(1);
-                            //这里的时间返回一个开始工作时候和偏移的值
-                            _propClientVo.setCreateTime(DateUtil.offsetSecond(discoveryVo.getWorkStart(), (j + 1) * _miningInterval));
-                            _hasDropCounts = ArrayUtil.append(_hasDropCounts, j + "");//新添加一个挖出的时间
-                            allPropClientVoList.add(_propClientVo);
+                            ////产生物品,直接添加
+                            //_allDropIds = ArrayUtil.append(_allDropIds, _propClientVo.getPropId().toString());
+                            //_propClientVo.setItemNum(1);
+                            ////这里的时间返回一个开始工作时候和偏移的值
+                            //_propClientVo.setCreateTime(DateUtil.offsetSecond(discoveryVo.getWorkStart(), (j + 1) * _miningInterval));
+                            //_hasDropCounts = ArrayUtil.append(_hasDropCounts, j + "");//新添加一个挖出的时间
+                            //allPropClientVoList.add(_propClientVo);
                         }
                     }
                 }
@@ -499,27 +513,6 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
                 }
             }
         }
-        //if (powerChar != null) {
-        //
-        //    ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(powerChar,ComCharactersClientVo.class);
-        //    comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, powerChar.getModelId(), powerChar.getModelColor());
-        //    comCharactersClientVos.add(comCharactersClientVo);
-        //}
-        //if (intelliChar != null) {
-        //
-        //
-        //    ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(intelliChar,ComCharactersClientVo.class);
-        //    comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, intelliChar.getModelId(), intelliChar.getModelColor());
-        //    comCharactersClientVos.add(comCharactersClientVo);
-        //
-        //}
-        //if (skillChar != null) {
-        //    //收获经验 todo 处理人物升级等
-        //    ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(skillChar,ComCharactersClientVo.class);
-        //    comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, skillChar.getModelId(), skillChar.getModelColor());
-        //    comCharactersClientVos.add(comCharactersClientVo);
-        //}
-
 
         //记录一个物品获得情况
         String _rewardCounts = String.join("|", _hasDropCounts);
@@ -533,16 +526,15 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
         //取最开始挖的 outTransUpperLimit 数量物品
         outExcelProps = allPropClientVoList.stream().limit(outTransUpperLimit).collect(Collectors.toList());
 
-        //当前关卡奖励的经验
-        Integer outExp = allPropClientVoList.stream().mapToInt(ExcelPropClientVo::getItemExp).sum();
+        //当前关卡奖励的经验,按获得算
+        Integer outExp = outExcelProps.stream().mapToInt(ExcelPropClientVo::getItemExp).sum();
         discoveryVo.setRewardExp(outExp);
         //todo 工作完成后,isStop
         if (discoveryVo.getIsWork().equals(GameEnum.WORK_COMPLETE.getValue()) && isStop) {
 
             comCharactersClientVos = characters.stream().map(e -> {
                 ComCharactersVo comCharactersVo = CopyUtil.copy(e, ComCharactersVo.class);
-                ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(comCharactersVo, excelCharacterLevelVo, outExp);
-
+                ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(comCharactersVo, outExp);
                 //设置保存的经验
                 comCharactersVo.setExp(comCharactersClientVo.getExp());
                 comCharactersVo.setLevel(comCharactersClientVo.getLevel());
@@ -553,22 +545,9 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
                 return comCharactersClientVo;
             }).collect(Collectors.toList());
 
-            ////重置人物角色职业工作状态
-            //if (powerChar != null) {
-            //    powerChar.setProfessional(GameEnum.PRO_WORK_NORMAL.getValue());
-            //    powerChar.setWorkPos(0);
-            //    comCharactersService.save(powerChar);
-            //}
-            //if (intelliChar != null) {
-            //    intelliChar.setProfessional(GameEnum.PRO_WORK_NORMAL.getValue());
-            //    intelliChar.setWorkPos(0);
-            //    comCharactersService.save(intelliChar);
-            //}
-            //if (skillChar != null) {
-            //    skillChar.setProfessional(GameEnum.PRO_WORK_NORMAL.getValue());
-            //    skillChar.setWorkPos(0);
-            //    comCharactersService.save(skillChar);
-            //}
+            //保存金币
+            comUsersService.addGold(discoveryVo.getUserId(),discoveryVo.getRewardCurrency());
+
             //把奖励物品保存到背包
             comPlayerBackpackService.saveAllByUserIdAndProps(discoveryVo.getUserId(), outExcelProps);
             //删除对应的队伍
@@ -577,7 +556,7 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
             //只显示已获得的经验和添加对应的部件
             comCharactersClientVos = characters.stream().map(e -> {
                 ComCharactersVo comCharactersVo = CopyUtil.copy(e, ComCharactersVo.class);
-                ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(comCharactersVo, excelCharacterLevelVo, outExp);
+                ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(comCharactersVo, outExp);
                 comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, e.getModelId(), e.getModelColor());
                 return comCharactersClientVo;
             }).collect(Collectors.toList());
@@ -627,51 +606,69 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
      *
      * @param comCharactersVo
      */
-    private ComCharactersClientVo upgradeComCharactersVo(ComCharactersVo comCharactersVo, List<ExcelCharacterLevelVo> excelCharacterLevelVo, Integer outExp) {
+    private ComCharactersClientVo upgradeComCharactersVo(ComCharactersVo comCharactersVo, Integer outExp) {
         if (comCharactersVo.getExp() == null) {
             throw new RuntimeException("upgrade characters exp is null!");
         }
         if (comCharactersVo.getLevel() == null) {
             throw new RuntimeException("upgrade characters level is null!");
         }
-        Integer _exp = comCharactersVo.getExp() + outExp;
-        Integer _level = comCharactersVo.getLevel(); // 这里等级至少是1级
+        //List<ExcelCharacterLevel> levelList = excelCharacterLevelService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_LEVEL.getMessage());
 
-        Integer final_level = _level;
-        ExcelCharacterLevelVo characterLevelVo = excelCharacterLevelVo.stream().filter(e -> e.getId().equals(final_level)).findFirst().get();
+        Integer _level = comCharactersVo.getLevel(); // 当前人物等级 这里等级至少是1级
+        Integer _exp = comCharactersVo.getExp() + outExp;
+        //不是满级的情况下,才处理升级
+        ExcelCharacterLevel nextLevel = excelCharacterLevelService.getNextLevelInfo(_level);
+        if(_level < nextLevel.getId()){
+            //Integer next_level = _level + 1; //下一级
+            //ExcelCharacterLevel nextLevelVo = levelList.stream().filter(e -> e.getId().equals(next_level)).findFirst().get();
+            while (_exp > nextLevel.getExp()) {
+                _exp -= nextLevel.getExp();
+                _level += 1;//提升一级
+
+                //增加的属性
+                Integer cPower = nextLevel.getPower() + comCharactersVo.getPower();
+                Integer cSkill = nextLevel.getSkill() + comCharactersVo.getSkills();
+                Integer cIntelligence = nextLevel.getIntelligence() + comCharactersVo.getIntelligence();
+                int randomAttr = (int) Math.ceil(Math.random() * nextLevel.getRandomAttr());
+                double addRandom = Math.random();
+                if (addRandom < 0.33) {
+                    cPower+=randomAttr;
+                }else if(addRandom>=0.33&&addRandom<0.66){
+                    cSkill+=randomAttr;
+                }else{
+                    cIntelligence+=randomAttr;
+                }
+                comCharactersVo.setPower(cPower);
+                comCharactersVo.setSkills(cSkill);
+                comCharactersVo.setIntelligence(cIntelligence);
+
+                //获取下一级
+                //Integer next_level2 = _level + 1;
+                //nextLevelVo = levelList.stream().filter(e -> e.getId().equals(next_level2)).findFirst().get();
+                nextLevel = excelCharacterLevelService.getNextLevelInfo(_level);
+            }
+            //最后的等级和经验
+            comCharactersVo.setLevel(_level);
+            comCharactersVo.setExp(_exp);
 
-        while (_exp > characterLevelVo.getExp()) {
-            _exp -= characterLevelVo.getExp();
-            _level += 1;//提升一级
-            Integer final_level2 = _level;
-            characterLevelVo = excelCharacterLevelVo.stream().filter(e -> e.getId().equals(final_level2)).findFirst().get();
-        }
-        //最后的等级和经验
-        comCharactersVo.setLevel(_level);
-        comCharactersVo.setExp(_exp);
-
-        //增加的属性
-        Integer cPower = characterLevelVo.getPower() + comCharactersVo.getPower();
-        Integer cSkill = characterLevelVo.getSkill() + comCharactersVo.getSkills();
-        Integer cIntelligence = characterLevelVo.getIntelligence() + comCharactersVo.getIntelligence();
-        int randomAttr = (int) Math.ceil(Math.random() * characterLevelVo.getRandomAttr());
-        double addRandom = Math.random();
-        if (addRandom < 0.33) {
-            cPower+=randomAttr;
-        }else if(addRandom>=0.33&&addRandom<0.66){
-            cSkill+=randomAttr;
+            ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(comCharactersVo, ComCharactersClientVo.class);
+            //返回当前需要升级的经验
+            comCharactersClientVo.setLevelUpExp(nextLevel.getExp());
+            return comCharactersClientVo;
         }else{
-            cIntelligence+=randomAttr;
+            //经验直接设置
+            comCharactersVo.setExp(_exp);
+            //返回当前级别的数据
+            Integer cur_level = _level; //当前级
+            //ExcelCharacterLevel curLevelVo = levelList.stream().filter(e -> e.getId().equals(cur_level)).findFirst().get();
+            ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(comCharactersVo, ComCharactersClientVo.class);
+            //返回当前需要升级的经验
+            comCharactersClientVo.setLevelUpExp(nextLevel.getExp());
+            return comCharactersClientVo;
         }
-        comCharactersVo.setPower(cPower);
-        comCharactersVo.setSkills(cSkill);
-        comCharactersVo.setIntelligence(cIntelligence);
-        //存储一次
-        //comCharactersService.save(comCharactersVo);
-        ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(comCharactersVo, ComCharactersClientVo.class);
-        //返回当前需要升级的经验
-        comCharactersClientVo.setLevelUpExp(characterLevelVo.getExp());
-        return comCharactersClientVo;
+
+
     }
 
 

+ 26 - 9
src/main/java/com/td/Dawa/game/complayerbackpack/service/ComPlayerBackpackServiceImpl.java

@@ -25,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -50,24 +51,38 @@ public class ComPlayerBackpackServiceImpl extends CommonServiceImpl<ComPlayerBac
      */
     @Override
     public List<ComPlayerBackpack> saveAllByUserIdAndProps(String userId, List<ExcelPropClientVo> propClientVoList) {
+        //对传入的数据去重,叠加
+        List<ExcelPropClientVo> _difPropClientVoList = new ArrayList<>();
+        for(ExcelPropClientVo _vo : propClientVoList){
+            //createTime不一样,用时间做对比
+            List<Integer> ids = _difPropClientVoList.stream().map(ExcelPropClientVo::getPropId).collect(Collectors.toList());
+            if(ids.contains(_vo.getPropId())){
+                //叠加
+                ExcelPropClientVo _super = _difPropClientVoList.get(ids.indexOf(_vo.getPropId()));
+                //log.info(_super.toString());
+                _super.setItemNum(_super.getItemNum() + _vo.getItemNum());
+            }else{
+                _difPropClientVoList.add(_vo);
+            }
+        }
         //todo 如果传入的数据背包有一部分没有,则新增
-        List<Integer> propIds = propClientVoList.stream().map(e -> e.getPropId()).collect(Collectors.toList());
+        List<Integer> propIds = _difPropClientVoList.stream().map(ExcelPropClientVo::getPropId).collect(Collectors.toList());
         List<ComPlayerBackpack> comPlayerBackpackList = comPlayerBackpackRepository.findAllByItemIdInAndUserId(propIds, userId);
-        List<Integer> itemArray = comPlayerBackpackList.stream().map(e -> e.getItemId()).collect(Collectors.toList());
+        List<Integer> itemArray = comPlayerBackpackList.stream().map(ComPlayerBackpack::getItemId).collect(Collectors.toList());
         //propIds 为原始prop id
-        for (ExcelPropClientVo vo : propClientVoList) {
+        for (ExcelPropClientVo vo : _difPropClientVoList) {
             if (itemArray.contains(vo.getPropId())) {
-                //如果存在,则为旧数据,+1
-                int index = itemArray.indexOf(vo.getPropId());
-                ComPlayerBackpack comPlayerBackpack = comPlayerBackpackList.get(index);
-                comPlayerBackpack.setAmount(comPlayerBackpack.getAmount() + 1);
-                log.info(comPlayerBackpack.toString() + " ==id:" + vo.getPropId());
+                //如果存在,则为旧数据,+ itemNum
+                ComPlayerBackpack comPlayerBackpack = comPlayerBackpackList.get(itemArray.indexOf(vo.getPropId()));
+                comPlayerBackpack.setAmount(comPlayerBackpack.getAmount() + vo.getItemNum());
+                log.info("1==>id:"+vo.getPropId());
+                log.info(comPlayerBackpack.toString());
                 super.save(CopyUtil.copy(comPlayerBackpack, ComPlayerBackpackVo.class));
             } else {
                 //如果不存在,新增
                 ComPlayerBackpack comPlayerBackpack = new ComPlayerBackpack();
                 //comPlayerBackpack.setId(UUIDUtil.getUUID());
-                comPlayerBackpack.setAmount(1d);
+                comPlayerBackpack.setAmount(vo.getItemNum().doubleValue());
                 comPlayerBackpack.setItemId(vo.getPropId());
                 comPlayerBackpack.setUserId(userId);
                 comPlayerBackpack.setItemName(vo.getName());
@@ -75,6 +90,8 @@ public class ComPlayerBackpackServiceImpl extends CommonServiceImpl<ComPlayerBac
                 comPlayerBackpack.setItemType(vo.getItemType());//分类和标识暂时设置一样
                 comPlayerBackpack.setCreateTime(vo.getCreateTime());
                 comPlayerBackpackList.add(comPlayerBackpack);
+                log.info("2==>id:"+vo.getPropId());
+                log.info(comPlayerBackpack.toString());
                 super.save(CopyUtil.copy(comPlayerBackpack, ComPlayerBackpackVo.class));
             }
         }

+ 3 - 24
src/main/java/com/td/Dawa/game/comusers/controller/ComUsersController.java

@@ -218,7 +218,9 @@ public class ComUsersController extends CommonController<ComUsersVo, ComUsers, S
      * @param userId
      * @return
      */
-    @GetMapping("getUserInfo")
+    @PostMapping("getUserInfo")
+    @Decrypt
+    @Encrypt
     public Result<Map> getUserInfo(@RequestParam(value = "userId") String userId) {
         Map map = new HashMap();
         ComUsersVo comUsersVo = comUsersService.findByUserId(userId);
@@ -226,29 +228,6 @@ public class ComUsersController extends CommonController<ComUsersVo, ComUsers, S
             return Result.of(null, false, ResultEnum.USER_DOES_NOT_EXIST.getMessage(), ResultEnum.USER_DOES_NOT_EXIST.getCode());
         }
         map.put("gold", comUsersVo.getGold());
-        map.put("diamond", comUsersVo.getDiamond());
-        map.put("CNT", comUsersVo.getCnt());
-        map.put("SNB", comUsersVo.getSnb());
-        map.put("snbPart", comUsersVo.getSnbPart());
-        map.put("address", comUsersVo.getAddress());
-        return Result.of(map);
-    }
-
-    /**
-     * 获取用户的snb
-     *
-     * @param userId
-     * @return
-     */
-    @GetMapping("getUserSnb")
-    public Result<Map> getUserSnbFunction(@RequestParam(value = "userId") String userId) {
-        Map map = new HashMap();
-        ComUsersVo comUsersVo = comUsersService.findByUserId(userId);
-        if (comUsersVo == null) {
-            return Result.of(null, false, ResultEnum.USER_DOES_NOT_EXIST.getMessage(), ResultEnum.USER_DOES_NOT_EXIST.getCode());
-        }
-        map.put("SNB", comUsersVo.getSnb());
-        map.put("snbPart", comUsersVo.getSnbPart());
         map.put("address", comUsersVo.getAddress());
         return Result.of(map);
     }

+ 2 - 0
src/main/java/com/td/Dawa/game/comusers/service/ComUsersService.java

@@ -31,4 +31,6 @@ public interface ComUsersService extends CommonService<ComUsersVo, ComUsers, Str
     Long newToday();
 
     void consumesGoldFromGetRole(String userId);
+
+    ComUsersVo addGold(String userId,Integer gold);
 }

+ 9 - 0
src/main/java/com/td/Dawa/game/comusers/service/ComUsersServiceImpl.java

@@ -89,4 +89,13 @@ public class ComUsersServiceImpl extends CommonServiceImpl<ComUsersVo, ComUsers,
         attriVo.setGold(_gold);
         super.save(attriVo);
     }
+
+
+    @Override
+    public ComUsersVo addGold(String userId,Integer gold) {
+        ComUsersVo attriVo = super.getVo(userId);
+        //记录当前金币
+        attriVo.setGold(attriVo.getGold() + gold);
+        return super.save(attriVo).getData();
+    }
 }

+ 2 - 0
src/main/java/com/td/Dawa/game/excelcharacterlevel/service/ExcelCharacterLevelService.java

@@ -5,4 +5,6 @@ import com.td.Dawa.game.excelcharacterlevel.pojo.ExcelCharacterLevel;
 import com.td.Dawa.game.excelcharacterlevel.vo.ExcelCharacterLevelVo;
 
 public interface ExcelCharacterLevelService extends CommonService<ExcelCharacterLevelVo, ExcelCharacterLevel, Integer> {
+
+    ExcelCharacterLevel getNextLevelInfo(Integer levelId);
 }

+ 22 - 1
src/main/java/com/td/Dawa/game/excelcharacterlevel/service/ExcelCharacterLevelServiceImpl.java

@@ -1,21 +1,42 @@
 package com.td.Dawa.game.excelcharacterlevel.service;
 
 import com.td.Dawa.common.service.*;
+import com.td.Dawa.config.enums.GameEnum;
 import com.td.Dawa.game.excelcharacterlevel.pojo.ExcelCharacterLevel;
 import com.td.Dawa.game.excelcharacterlevel.vo.ExcelCharacterLevelVo;
 import com.td.Dawa.game.excelcharacterlevel.repository.ExcelCharacterLevelRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
+import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 @Transactional
-public class ExcelCharacterLevelServiceImpl extends CommonServiceImpl<ExcelCharacterLevelVo, ExcelCharacterLevel, Integer> implements ExcelCharacterLevelService{
+public class ExcelCharacterLevelServiceImpl extends CommonServiceImpl<ExcelCharacterLevelVo, ExcelCharacterLevel, Integer> implements ExcelCharacterLevelService {
 
     @PersistenceContext
     private EntityManager em;
     @Autowired
     private ExcelCharacterLevelRepository excelCharacterLevelRepository;
+
+    /**
+     * 根据当前等级返回对应的升级信息,如果超过了最大等级,返回当前等级的数据
+     *
+     * @param levelId
+     * @return
+     */
+    @Override
+    public ExcelCharacterLevel getNextLevelInfo(Integer levelId) {
+        List<ExcelCharacterLevel> levelList = super.getListFromCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_LEVEL.getMessage());
+        List<Integer> levelIdList = levelList.stream().map(ExcelCharacterLevel::getId).collect(Collectors.toList());
+        if (levelId < levelList.get(levelList.size() - 1).getId()) {
+            return levelList.get(levelIdList.indexOf(levelId + 1));
+        } else {
+            return levelList.get(levelIdList.indexOf(levelId));
+        }
+    }
 }

+ 37 - 11
src/main/java/com/td/Dawa/sys/sysGame/controller/sysExcelController.java

@@ -148,14 +148,20 @@ public class sysExcelController extends CommonController<ComUsersVo, ComUsers, S
     @Decrypt
     @Encrypt
     public Result saveExcelResources(ExcelResourcesVo vo) {
-        return excelResourcesService.save(vo);
+
+        Result result = excelResourcesService.save(vo);
+        excelResourcesService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_RESOURCES.getMessage());
+        return result;
+
     }
 
     @PostMapping("deleteExcelResources")
     @Decrypt
     @Encrypt
     public Result deleteExcelResources(@RequestParam("id") Integer id) {
-        return excelResourcesService.delete(id);
+        Result result = excelResourcesService.delete(id);
+        excelResourcesService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_RESOURCES.getMessage());
+        return result;
     }
     //道具表操作
     @GetMapping("excelProp")
@@ -204,14 +210,18 @@ public class sysExcelController extends CommonController<ComUsersVo, ComUsers, S
     @Decrypt
     @Encrypt
     public Result saveExcelParameter(ExcelParameterVo vo) {
-        return excelParameterService.save(vo);
+        Result result = excelParameterService.save(vo);
+        excelParameterService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_PARAMETER.getMessage());
+        return result;
     }
 
     @PostMapping("deleteExcelParameter")
     @Decrypt
     @Encrypt
     public Result deleteExcelParameter(@RequestParam("id") Integer id) {
-        return excelParameterService.delete(id);
+        Result result = excelParameterService.delete(id);
+        excelParameterService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_PARAMETER.getMessage());
+        return result;
     }
 
     //掉落表操作
@@ -258,14 +268,20 @@ public class sysExcelController extends CommonController<ComUsersVo, ComUsers, S
     @Decrypt
     @Encrypt
     public Result saveExcelCharacterLevel(ExcelCharacterLevelVo vo) {
-        return excelCharacterLevelService.save(vo);
+
+        Result result = excelCharacterLevelService.save(vo);
+        excelCharacterLevelService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_LEVEL.getMessage());
+        return result;
     }
 
     @PostMapping("deleteExcelCharacterLevel")
     @Decrypt
     @Encrypt
     public Result deleteExcelCharacterLevel(@RequestParam("id") Integer id) {
-        return excelCharacterLevelService.delete(id);
+
+        Result result = excelCharacterLevelService.delete(id);
+        excelCharacterLevelService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_LEVEL.getMessage());
+        return result;
     }
     //人物组件表操作
     @GetMapping("excelCharacterCreate")
@@ -283,15 +299,20 @@ public class sysExcelController extends CommonController<ComUsersVo, ComUsers, S
     @PostMapping("saveExcelCharacterCreate")
     @Decrypt
     @Encrypt
-    public Result saveExcelCharacterLevel(ExcelCharacterCreateVo vo) {
-        return excelCharacterCreateService.save(vo);
+    public Result saveExcelCharacterCreate(ExcelCharacterCreateVo vo) {
+
+        Result result = excelCharacterCreateService.save(vo);
+        excelCharacterCreateService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_CREATE.getMessage());
+        return result;
     }
 
     @PostMapping("deleteExcelCharacterCreate")
     @Decrypt
     @Encrypt
     public Result deleteExcelCharacterCreate(@RequestParam("id") Integer id) {
-        return excelCharacterCreateService.delete(id);
+        Result result = excelCharacterCreateService.delete(id);
+        excelCharacterCreateService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_CREATE.getMessage());
+        return result;
     }
 
     //人物属性表操作
@@ -311,7 +332,10 @@ public class sysExcelController extends CommonController<ComUsersVo, ComUsers, S
     @Decrypt
     @Encrypt
     public Result saveExcelCharacterAttri(ExcelCharacterAttriVo vo) {
-        return excelCharacterAttriService.save(vo);
+
+        Result result = excelCharacterAttriService.save(vo);
+        excelCharacterAttriService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_ATTRI.getMessage());
+        return result;
     }
 
 
@@ -319,6 +343,8 @@ public class sysExcelController extends CommonController<ComUsersVo, ComUsers, S
     @Decrypt
     @Encrypt
     public Result deleteExcelCharacterAttri(@RequestParam("id") Integer id) {
-        return excelCharacterAttriService.delete(id);
+        Result result = excelCharacterAttriService.delete(id);
+        excelCharacterAttriService.updateListToCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_ATTRI.getMessage());
+        return result;
     }
 }

+ 49 - 0
src/main/java/com/td/Dawa/sys/sysGame/controller/sysGameUsersController.java

@@ -8,6 +8,8 @@ import com.td.Dawa.common.pojo.Result;
 import com.td.Dawa.config.enums.GameEnum;
 import com.td.Dawa.game.comcntorder.service.ComCntOrderService;
 import com.td.Dawa.game.comcntorder.vo.ComCntOrderVo;
+import com.td.Dawa.game.complayerbackpack.service.ComPlayerBackpackService;
+import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackVo;
 import com.td.Dawa.game.complayergoods.service.ComPlayerGoodsService;
 import com.td.Dawa.game.complayergoods.vo.ComPlayerGoodsVo;
 import com.td.Dawa.game.complayerland.service.ComPlayerLandService;
@@ -61,6 +63,9 @@ public class sysGameUsersController extends CommonController<ComUsersVo, ComUser
     @Autowired
     private ComPlayerGoodsService comPlayerGoodsService;
 
+    @Autowired
+    private ComPlayerBackpackService comPlayerBackpackService;
+
     @Autowired
     private JwtTokenUtil jwtTokenUtil;
 
@@ -265,4 +270,48 @@ public class sysGameUsersController extends CommonController<ComUsersVo, ComUser
         return comPlayerGoodsService.page(comPlayerGoodsVo);
     }
 
+
+
+
+    @GetMapping("userPlayerBackpack")
+    public ModelAndView userPlayerBackpack(){
+        return new ModelAndView("sys/aComUser/userPlayerBackpack");
+    }
+
+
+    @PostMapping("findPlayerBackpack")
+    @Decrypt
+    @Encrypt
+    public Result<?> findPlayerBackpack(ComUsersVo comUsersVo){
+        if(comUsersVo.getAddress() != null){
+            //查询用户id
+            ComUsersVo _comUsersVo = comUsersService.findByAddress(comUsersVo.getAddress());
+            if(!_comUsersVo.equals(null)){
+                //如果存在用户数据,继续查询背包
+                ComPlayerBackpackVo vo = new ComPlayerBackpackVo();
+                vo.setUserId(_comUsersVo.getUserId());
+                vo.setPage(comUsersVo.getPage());
+                vo.setRows(comUsersVo.getRows());
+                vo.setSidx(comUsersVo.getSidx());
+                vo.setSord(comUsersVo.getSord());
+                return comPlayerBackpackService.page(vo);
+            }
+        }
+        return Result.of(new PageInfo<>());
+    }
+    @PostMapping("savePlayerBackpack")
+    @Decrypt
+    @Encrypt
+    public Result<?> savePlayerBackpack(ComPlayerBackpackVo vo){
+        return comPlayerBackpackService.save(vo);
+    }
+
+
+    @PostMapping("deletePlayerBackpack")
+    @Decrypt
+    @Encrypt
+    public Result deletePlayerBackpack(@RequestParam("id") String id) {
+        Result result = comPlayerBackpackService.delete(id);
+        return result;
+    }
 }

+ 1 - 1
src/main/resources/static/sys/aComConfig/js/excelCharacterLevel.js

@@ -28,7 +28,7 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
         //响应后数据处理
         , parseData: function (res) { //res 即为原始返回的数据
             let data = res.data;
-            // console.log(res);
+            console.log(res);
             return {
                 "flag": res.flag, //解析接口状态
                 "msg": res.msg, //解析提示文本

+ 428 - 0
src/main/resources/static/sys/aComUser/js/userPlayerBackpack.js

@@ -0,0 +1,428 @@
+let tableIns;
+let tableCNT;
+let tableSNB;
+let tablePlayerLog;
+let tablePlayerProfit;
+let tree;
+layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], function () {
+    let table = layui.table;
+    let form = layui.form;//select、单选、复选等依赖form
+    form.verify({
+        positiveNumberRequiredTrue: [/^(([0-9]+[\.]?[0-9]+)|[1-9])$/, '只能填写正数'],//必填,且只能输入正数
+        positiveWholeNumberRequiredTrue: [/^[+]{0,1}(\d+)$/, '只能填写正整数'],//必填,且只能输入正整数
+    });
+
+    let element = layui.element; //导航的hover效果、二级菜单等功能,需要依赖element模块
+    let laydate = layui.laydate;
+    tree = layui.tree;
+    let height = document.documentElement.clientHeight * 0.5; //随便设置下,和操作表单大概一样
+    //用户列表
+    tableIns = table.render({
+        elem: '#mainTable'
+        , url: ctx + "/sys/sysComUsers/findPlayerBackpack"
+        , method: 'POST'
+        //请求前参数处理
+        , request: {
+            pageName: 'page' //页码的参数名称,默认:page
+            , limitName: 'rows' //每页数据量的参数名,默认:limit
+        }
+        , where: {sidx: "desc", sord: "createTime"}
+        , response: {
+            statusName: 'flag' //规定数据状态的字段名称,默认:code
+            , statusCode: true //规定成功的状态码,默认:0
+            , msgName: 'msg' //规定状态信息的字段名称,默认:msg
+            , countName: 'records' //规定数据总数的字段名称,默认:count
+            , dataName: 'rows' //规定数据列表的字段名称,默认:data
+        }
+        //响应后数据处理
+        , parseData: function (res) { //res 即为原始返回的数据
+            var data = res.data;
+            // console.log("返回的地址数据:", data);
+            // if (data.rows.length > 0) {
+            //     let _findData = {userId: data.rows[0].userId, sidx: "desc", sord: "createTime"};
+            //     if (!tablePlayerLog) {
+            //         initPlayerLog(table, _findData);
+            //     } else {
+            //         playerLogReload(_findData);
+            //     }
+            //
+            //     if(!tablePlayerProfit){
+            //         initPlayerProfit(table, _findData);
+            //     }else{
+            //         playerProfitReload(_findData);
+            //     }
+            // }
+
+            return {
+                "flag": res.flag, //解析接口状态
+                "msg": res.msg, //解析提示文本
+                "records": data.records, //解析数据长度
+                "rows": data.rows //解析数据列表
+            };
+        }
+        , toolbar: '#mainTableToolbarDemo'
+        , title: '用户仓库列表'
+        , cols: [[
+            {field: 'id', title: '背包id', hide: true}
+            , {field: 'userId', title: '用户id'}
+            , {field: 'itemId', title: '物品id'}
+            , {
+                field: 'itemType', title: '物品类型', templet: function (d) {
+                    if (d.itemType == 1) {
+                        return '<span style="color: red">货币</span>';
+                    } else if (d.itemType == 2) {
+                        return '<span style="color: green">矿石</span>';
+                    } else if (d.itemType == 3) {
+                        return '<span style="color: green">材料</span>';
+                    } else {
+                        return '未添加:' + d.itemType;
+                    }
+                }
+            }
+            , {field: 'itemTag', title: '标记分类'}
+            , {field: 'itemName', title: '物品名字'}
+            , {field: 'pictureName', title: '图片'}
+            , {field: 'amount', title: '数量'}
+            , {field: 'createTime', title: '创建时间', hide: true}
+            , {field: 'updateTime', title: '更新时间', hide: true}
+            , {fixed: 'right', title: '操作', width: 140, toolbar: '#mainTableBarDemo'}
+        ]]
+        , defaultToolbar: ['', 'exports', 'print']
+        , page: true
+        , height: height
+        , cellMinWidth: 80
+    });
+
+    //头工具栏事件
+    table.on('toolbar(test)', function (obj) {
+        switch (obj.event) {
+            case 'query':
+                //根据用户地址查询
+                findByUserAddress(form);
+                break;
+            case 'playerLogReload':
+                playerLogReload();
+                break;
+
+            case 'addNewRow':
+                $("#tableId").css("display", "none");
+                $("#tableTime").css("display", "none");
+                $("#saveBtn").css("display", "none");
+                $("#addBtn").css("display", "block");
+                $("#comForm")[0].reset();
+                form.render();
+                break;
+        }
+    });
+
+    //监听行工具事件
+    table.on('tool(test)', function (obj) {
+        let data = obj.data;
+        //编辑
+        if (obj.event === 'edit') {
+            $("#tableId").css("display", "block");
+            $("#tableTime").css("display", "block");
+            $("#saveBtn").css("display", "block");
+            $("#addBtn").css("display", "none");
+            //回显操作表单
+            $("#comForm").form(data);
+            form.render();
+        } else if (obj.event === 'del') {
+            layer.confirm('真的删除行么?', function (index) {
+                $.post(ctx + "/sys/sysComUsers/deletePlayerBackpack", {id: data.id}, function (data) {
+                    if (!data.flag) {
+                        layer.msg(data.msg, {icon: 2, time: 2000}, function () {
+                        });
+                        return;
+                    }
+                    obj.del();
+                    tableIns.reload();
+                });
+                layer.close(index);
+            });
+        }
+    });
+
+
+    //日期选择器
+    laydate.render({
+        elem: '#expiredTimeDate',
+        format: "yyyy-MM-dd HH:mm:ss"
+    });
+
+    //监听提交
+    form.on('submit(comFilter)', function (data) {
+        comFormSave(false);
+    });
+    form.on('submit(comAddFilter)', function (data) {
+        comFormSave(true);
+    });
+
+});
+
+
+function findByUserAddress(form) {
+    //重置数据
+    $("#comForm")[0].reset();
+    form.render();
+    let queryByAddress = $("#queryByAddress").val();
+    //获取菜单数据
+    if (queryByAddress.length <= 0) {
+        layer.msg("输入用户钱包地址查询", {icon: 2, time: 1000}, function () {
+        });
+        return;
+    }
+    tableIns.reload({
+        page: {
+            curr: 1 //重新从第 1 页开始
+            , limit: 10
+        },
+        method: 'POST'
+        , url: ctx + "/sys/sysComUsers/findPlayerBackpack"
+        , where: {address: queryByAddress, sidx: "desc", sord: "createTime"}
+        , done: function (res, curr, count) {
+            // console.log(res, curr, count);
+            $("input[name='queryByAddress']").val(queryByAddress);
+            //this.where={};
+            //不清空,有问题:搜索条件会保留
+            //清空,  有问题:分页的时候没有搜索条件了,分页会受到影响
+        }
+    });
+}
+
+/**
+ * 提交保存
+ */
+function comFormSave(isAddNew) {
+    let comForm = $("#comForm").serializeObject();
+    if (!comForm.id && !isAddNew) {
+        layer.msg("选择编辑的对象", {icon: 2, time: 1000}, function () {
+        });
+        return;
+    }
+    $.post(ctx + "/sys/sysComUsers/savePlayerBackpack", comForm, function (data) {
+        if (!data.flag) {
+            layer.msg(data.msg, {icon: 2, time: 2000}, function () {
+            });
+            return;
+        }
+        tableIns.reload();
+    });
+}
+
+/**
+ * 用户操作日志
+ * @param table
+ * @param data
+ */
+function initPlayerLog(table, data) {
+    //用户操作playerLog
+    // console.log("playerLog");
+    tablePlayerLog = table.render({
+        elem: '#comPlayerLogTable'
+        , url: ctx + "/sys/sysComUsers/findPlayerLogPage"
+        , method: 'POST'
+        //请求前参数处理
+        , request: {
+            pageName: 'page' //页码的参数名称,默认:page
+            , limitName: 'rows' //每页数据量的参数名,默认:limit
+        }
+        , where: data
+        , response: {
+            statusName: 'flag' //规定数据状态的字段名称,默认:code
+            , statusCode: true //规定成功的状态码,默认:0
+            , msgName: 'msg' //规定状态信息的字段名称,默认:msg
+            , countName: 'records' //规定数据总数的字段名称,默认:count
+            , dataName: 'rows' //规定数据列表的字段名称,默认:data
+        }
+        //响应后数据处理
+        , parseData: function (res) { //res 即为原始返回的数据
+            let data = res.data;
+            // console.log("playerLog",res);
+            return {
+                "flag": res.flag, //解析接口状态
+                "msg": res.msg, //解析提示文本
+                "records": data.records, //解析数据长度
+                "rows": data.rows //解析数据列表
+            };
+        }
+        , toolbar: '#comPlayerLogTableToolbarDemo'
+        , title: '用户仓库操作列表'
+        , cols: [[
+            {field: 'id', title: 'ID', hide: true}
+            , {field: 'userId', title: 'userId', width: 260}
+            , {field: 'tId', title: '目标id', width: 100}
+            , {
+                field: 'tType', title: '交易的类型', width: 100, templet: function (d) {
+                    if (d.tType == 0) {  // 自定义内容
+                        return '<span style="color: green">收获果实</span>';
+                    } else if (d.tType == 1) {
+                        return '<span style="color: red">种植种子</span>';
+                    } else if (d.tType == 2) {
+                        return '<span style="color: red">赠送</span>';
+                    } else if (d.tType == 3) {
+                        return '<span style="color: green">被赠送</span>';
+                    } else if (d.tType == 4) {
+                        return '<span style="color: green">钻石兑换种子</span>';
+                    } else if (d.tType == 5) {
+                        return '<span style="color: red">出售果实</span>';
+                    } else if (d.tType == 6) {
+                        return '<span style="color: green">偷取果实</span>';
+                    } else if (d.tType == 7) {
+                        return '<span style="color: red">断电扣除果实</span>';
+                    } else {
+                        return '<span style="color: green">待添加:</span>' + d.tType;
+                    }
+                }
+            }
+            , {field: 'tName', title: '物品名字', width: 120}
+            // , {field: 'tAmount', title: '交易数量', width: 150}
+            // , {field: 'beforeAmount', title: '交易前数量'}
+            // , {field: 'afterAmount', title: '交易后数量'}
+            , {
+                field: 'tAmount', title: '交易数量', width: 150, templet: function (d) {
+                    return (d.tAmount + d.tPart).toFixed(5);
+                }
+            }
+            , {
+                field: 'beforeAmount', title: '交易前数量', templet: function (d) {
+                    return (d.beforeAmount + d.beforePart).toFixed(5);
+                }
+            }
+            , {
+                field: 'afterAmount', title: '交易后数量', templet: function (d) {
+                    return (d.afterAmount + d.afterPart).toFixed(5);
+                }
+            }
+            , {field: 'tLoss', title: '系统扣除部分'}
+            , {field: 'lMultiple', title: 'land倍数', width: 80}
+            , {
+                field: 'withered', title: '损耗类型', width: 100, templet: function (d) {
+                    if (d.withered == 0) {  // 自定义内容
+                        return '<span style="color: green">---</span>';
+                    } else if (d.withered == 1) {
+                        return '<span style="color: red">枯萎(死亡)</span>';
+                    } else if (d.withered == 2) {
+                        return '<span style="color: red">断电损耗</span>';
+                    } else {
+                        return '<span style="color: green">待添加:</span>' + d.withered;
+                    }
+                }
+            }
+            , {field: 'createTime', title: '创建时间'}
+            , {field: 'updateTime', title: '更新时间', hide: true}
+        ]]
+        , defaultToolbar: ['', 'exports', 'print']
+        , page: true
+        , height: 500
+        , cellMinWidth: 80
+    });
+}
+
+
+function playerLogReload(data) {
+    tablePlayerLog.reload({
+        page: {
+            curr: 1 //重新从第 1 页开始
+            , limit: 10
+        }
+        , method: 'POST'
+        , url: ctx + "/sys/sysComUsers/findPlayerLogPage"
+        , where: data
+        , done: function (res, curr, count) {
+        }
+    });
+}
+
+
+/**
+ * 用户偷取的操作
+ * @param table
+ * @param data
+ */
+function initPlayerProfit(table, data) {
+    //用户操作PlayerProfit
+    tablePlayerProfit = table.render({
+        elem: '#comPlayerProfitTable'
+        , url: ctx + "/sys/sysComUsers/findPlayerProfitPage"
+        , method: 'POST'
+        //请求前参数处理
+        , request: {
+            pageName: 'page' //页码的参数名称,默认:page
+            , limitName: 'rows' //每页数据量的参数名,默认:limit
+        }
+        , where: data
+        , response: {
+            statusName: 'flag' //规定数据状态的字段名称,默认:code
+            , statusCode: true //规定成功的状态码,默认:0
+            , msgName: 'msg' //规定状态信息的字段名称,默认:msg
+            , countName: 'records' //规定数据总数的字段名称,默认:count
+            , dataName: 'rows' //规定数据列表的字段名称,默认:data
+        }
+        //响应后数据处理
+        , parseData: function (res) { //res 即为原始返回的数据
+            let data = res.data;
+            // console.log("playerLog",res);
+            return {
+                "flag": res.flag, //解析接口状态
+                "msg": res.msg, //解析提示文本
+                "records": data.records, //解析数据长度
+                "rows": data.rows //解析数据列表
+            };
+        }
+        , toolbar: '#comPlayerProfitTableToolbarDemo'
+        , title: '用户仓库操作列表'
+        , cols: [[
+            {field: 'id', title: 'ID', hide: true}
+            , {field: 'userId', title: 'userId', width: 260}
+            , {field: 'targetId', title: '目标id', width: 100}
+            , {field: 'plantFlag', title: '种植标识', width: 120}
+            , {field: 'landId', title: '土地号数', width: 120}
+            , {
+                field: 'leaseDate', title: '租赁类型', width: 100, templet: function (d) {
+                    if (d.leaseDate == 1) {  // 自定义内容
+                        return '<span style="color: green">3个月</span>';
+                    } else if (d.leaseDate == 2) {
+                        return '<span style="color: red">1年</span>';
+                    } else if (d.leaseDate == 3) {
+                        return '<span style="color: red">5年</span>';
+                    } else if (d.leaseDate == 4) {
+                        return '<span style="color: red">养殖场</span>';
+                    } else {
+                        return '<span style="color: green">待添加:</span>' + d.leaseDate;
+                    }
+                }
+            }
+            , {field: 'leaseMultiple', title: '租赁倍数', width: 120}
+            , {field: 'harvest', title: '土地产出量', width: 150}
+            , {field: 'profit', title: '利润总值'}
+            , {field: 'profitAfter', title: '交易后利润'}
+            , {field: 'stolen', title: '目标损失量', width: 150}
+            , {field: 'finalSteal', title: '玩家偷取得到的数量'}
+            , {field: 'profitRatio', title: '收成的比例值'}
+            , {field: 'stealRatio', title: '比例区间1%~3%'}
+            , {field: 'finalRatio', title: '损失比例', width: 80}
+            , {field: 'createTime', title: '创建时间'}
+            , {field: 'updateTime', title: '更新时间', hide: true}
+        ]]
+        , defaultToolbar: ['', 'exports', 'print']
+        , page: true
+        , height: 500
+        , cellMinWidth: 80
+    });
+}
+
+
+function playerProfitReload(data) {
+    tablePlayerProfit.reload({
+        page: {
+            curr: 1 //重新从第 1 页开始
+            , limit: 10
+        }
+        , method: 'POST'
+        , url: ctx + "/sys/sysComUsers/findPlayerProfitPage"
+        , where: data
+        , done: function (res, curr, count) {
+        }
+    });
+}

+ 172 - 0
src/main/resources/view/sys/aComUser/userPlayerBackpack.html

@@ -0,0 +1,172 @@
+<!DOCTYPE html>
+<!--解决idea thymeleaf 表达式模板报红波浪线-->
+<!--suppress ALL -->
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+    <!-- 引入公用部分 -->
+    <script th:replace="common/head::static"></script>
+    <!-- 游戏数据用户相关样式 -->
+    <link th:href="@{/sys/aComUser/css/user.css}" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div class="layui-row layui-col-space15">
+    <!-- 树 -->
+    <div class="layui-col-md6">
+        <div class="layui-card">
+            <div class="layui-card-header">用户仓库列表</div>
+            <div class="layui-card-body">
+                <!-- 表格主体 -->
+                <table class="layui-hide" id="mainTable" lay-filter="test"></table>
+                <!-- 模板 -->
+                <script type="text/html" id="mainTableToolbarDemo">
+                    <div class="layui-form-item">
+                        <div class="layui-inline">
+                            <label class="layui-form-label">钱包地址</label>
+                            <div class="layui-input-inline" style="width: 300px;">
+                                <input type="text" id="queryByAddress" name="queryByAddress" autocomplete="off"
+                                       placeholder="输入钱包地址" class="layui-input layui-btn-sm">
+                            </div>
+                        </div>
+                        <div class="layui-inline">
+                            <button class="layui-btn layui-btn-sm" style="padding: 0 10px;" lay-event="query">查询<i
+                                    class="layui-icon layui-icon-search"></i></button>
+                        </div>
+                    </div>
+                    <div class="layui-btn-container">
+                        <button class="layui-btn layui-btn-sm" lay-event="addNewRow">新增</button>
+                    </div>
+                </script>
+
+                <script type="text/html" id="mainTableBarDemo">
+                    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑<i class="layui-icon layui-icon-edit"></i></a>
+                    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+                </script>
+            </div>
+        </div>
+
+    </div>
+    <!-- 操作表单 -->
+    <div class="layui-col-md6">
+        <div class="layui-card">
+            <div class="layui-card-header">操作表单</div>
+            <div class="layui-card-body">
+                <form id="comForm" class="layui-form layui-form-pane">
+                    <div  class="layui-form-item" id="tableId">
+                        <label class="layui-form-label">背包ID</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="id" autocomplete="off" placeholder="id"
+                                   class="layui-input" readonly="readonly">
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">物品ID</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="itemId" autocomplete="off" placeholder="itemId"
+                                   class="layui-input" readonly="readonly">
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">类型(1:货币,2:矿石,3:材料)</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="itemType" autocomplete="off" placeholder="itemType"
+                                   class="layui-input" >
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">标记分类</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="itemTag" autocomplete="off" placeholder="itemTag"
+                                   class="layui-input">
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">物品名字</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="itemName" autocomplete="off" placeholder="itemName"
+                                   class="layui-input" >
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">图片</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="pictureName" autocomplete="off" placeholder="pictureName"
+                                   class="layui-input" >
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">物品数量</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="amount" autocomplete="off" placeholder="amount"
+                                   class="layui-input">
+                        </div>
+                    </div>
+                    <div class="layui-form-item" id="tableTime">
+                        <div class="layui-inline">
+                            <label class="layui-form-label">创建时间</label>
+                            <div class="layui-input-block">
+                                <input type="text" name="createTime" autocomplete="off" class="layui-input"
+                                       readonly="readonly">
+                            </div>
+                        </div>
+                    </div>
+                    <div class="layui-form-item" id="tableTime">
+                        <div class="layui-inline">
+                            <label class="layui-form-label">更新时间</label>
+                            <div class="layui-input-block">
+                                <input type="text" name="updateTime" autocomplete="off" class="layui-input"
+                                       readonly="readonly">
+                            </div>
+                        </div>
+                    </div>
+                    <!-- 隐藏域 -->
+                    <input type="text" name="userId" hidden="hidden"/>
+
+                    <div class="layui-form-item">
+                        <div class="layui-input-block">
+                            <a id="saveBtn" class="layui-btn" type="submit" lay-submit lay-filter="comFilter">保存</a>
+                            <a id="addBtn" class="layui-btn" type="submit" lay-submit lay-filter="comAddFilter">新增</a>
+                        </div>
+                    </div>
+                </form>
+
+            </div>
+        </div>
+    </div>
+    <!--<div class="layui-col-md12">-->
+    <!--    <div class="layui-card">-->
+    <!--        <div class="layui-card-header">用户仓库操作列表</div>-->
+    <!--        <div class="layui-card-body">-->
+    <!--            &lt;!&ndash; 表格主体 &ndash;&gt;-->
+    <!--            <table class="layui-hide" id="comPlayerLogTable" lay-filter="test"></table>-->
+    <!--            &lt;!&ndash; 模板 &ndash;&gt;-->
+    <!--            <script type="text/html" id="comPlayerLogTableToolbarDemo">-->
+    <!--                <div class="layui-btn-container">-->
+    <!--                    <button class="layui-btn layui-btn-sm" lay-event="playerLogReload">刷新</button>-->
+    <!--                </div>-->
+    <!--            </script>-->
+    <!--        </div>-->
+    <!--    </div>-->
+    <!--</div>-->
+
+    <!--<div class="layui-col-md12">-->
+    <!--    <div class="layui-card">-->
+    <!--        <div class="layui-card-header">用户偷取操作列表</div>-->
+    <!--        <div class="layui-card-body">-->
+    <!--            &lt;!&ndash; 表格主体 &ndash;&gt;-->
+    <!--            <table class="layui-hide" id="comPlayerProfitTable" lay-filter="test"></table>-->
+    <!--            &lt;!&ndash; 模板 &ndash;&gt;-->
+    <!--            <script type="text/html" id="comPlayerProfitTableToolbarDemo">-->
+    <!--                <div class="layui-btn-container">-->
+    <!--                    <button class="layui-btn layui-btn-sm" lay-event="playerProfitReload">刷新</button>-->
+    <!--                </div>-->
+    <!--            </script>-->
+    <!--        </div>-->
+    <!--    </div>-->
+    <!--</div>-->
+
+</div>
+</body>
+<!-- js -->
+<script th:src="@{/sys/aComUser/js/userPlayerBackpack.js}"></script>
+</html>