ソースを参照

1.修改调整探索,角色相关接口

slambb 3 年 前
コミット
694a2e82fe
40 ファイル変更1093 行追加357 行削除
  1. 5 0
      src/main/java/com/td/Dawa/BossApplication.java
  2. 22 0
      src/main/java/com/td/Dawa/common/pojo/PageInfo.java
  3. 2 0
      src/main/java/com/td/Dawa/common/service/CommonService.java
  4. 11 0
      src/main/java/com/td/Dawa/common/service/CommonServiceImpl.java
  5. 2 0
      src/main/java/com/td/Dawa/config/enums/GameEnum.java
  6. 2 0
      src/main/java/com/td/Dawa/config/enums/ResultEnum.java
  7. 1 1
      src/main/java/com/td/Dawa/game/comcharacters/service/ComCharactersService.java
  8. 179 105
      src/main/java/com/td/Dawa/game/comcharacters/service/ComCharactersServiceImpl.java
  9. 1 1
      src/main/java/com/td/Dawa/game/comcharacters/vo/ComCharactersClientVo.java
  10. 52 0
      src/main/java/com/td/Dawa/game/comcharacters/vo/ComCharactersInfoVo.java
  11. 37 0
      src/main/java/com/td/Dawa/game/comcharacters/vo/ComCharactersResourcesVo.java
  12. 21 0
      src/main/java/com/td/Dawa/game/comcharactersdiscovery/controller/ComCharactersDiscoveryController.java
  13. 2 0
      src/main/java/com/td/Dawa/game/comcharactersdiscovery/service/ComCharactersDiscoveryService.java
  14. 236 212
      src/main/java/com/td/Dawa/game/comcharactersdiscovery/service/ComCharactersDiscoveryServiceImpl.java
  15. 50 0
      src/main/java/com/td/Dawa/game/complayerbackpack/controller/ComPlayerBackpackController.java
  16. 33 0
      src/main/java/com/td/Dawa/game/complayerbackpack/pojo/ComPlayerBackpack.java
  17. 15 0
      src/main/java/com/td/Dawa/game/complayerbackpack/repository/ComPlayerBackpackRepository.java
  18. 18 0
      src/main/java/com/td/Dawa/game/complayerbackpack/service/ComPlayerBackpackService.java
  19. 106 0
      src/main/java/com/td/Dawa/game/complayerbackpack/service/ComPlayerBackpackServiceImpl.java
  20. 33 0
      src/main/java/com/td/Dawa/game/complayerbackpack/vo/ComPlayerBackpackClientVo.java
  21. 29 0
      src/main/java/com/td/Dawa/game/complayerbackpack/vo/ComPlayerBackpackSimpleVo.java
  22. 29 0
      src/main/java/com/td/Dawa/game/complayerbackpack/vo/ComPlayerBackpackVo.java
  23. 3 1
      src/main/java/com/td/Dawa/game/excelcharacterlevel/pojo/ExcelCharacterLevel.java
  24. 3 1
      src/main/java/com/td/Dawa/game/excelcharacterlevel/vo/ExcelCharacterLevelSimpleVo.java
  25. 3 1
      src/main/java/com/td/Dawa/game/excelcharacterlevel/vo/ExcelCharacterLevelVo.java
  26. 2 0
      src/main/java/com/td/Dawa/game/excelprop/pojo/ExcelProp.java
  27. 47 0
      src/main/java/com/td/Dawa/game/excelprop/vo/ExcelPropAndProVo.java
  28. 3 1
      src/main/java/com/td/Dawa/game/excelprop/vo/ExcelPropClientVo.java
  29. 2 0
      src/main/java/com/td/Dawa/game/excelprop/vo/ExcelPropSimpleVo.java
  30. 2 0
      src/main/java/com/td/Dawa/game/excelprop/vo/ExcelPropVo.java
  31. 2 2
      src/main/java/com/td/Dawa/game/excelresources/pojo/ExcelResources.java
  32. 2 2
      src/main/java/com/td/Dawa/game/excelresources/vo/ExcelResourcesClientVo.java
  33. 2 2
      src/main/java/com/td/Dawa/game/excelresources/vo/ExcelResourcesSimpleVo.java
  34. 2 2
      src/main/java/com/td/Dawa/game/excelresources/vo/ExcelResourcesVo.java
  35. 2 1
      src/main/java/com/td/Dawa/util/ExcelDataUtil.java
  36. 95 0
      src/main/java/com/td/Dawa/util/ProbabilityIntervalUtil.java
  37. 2 1
      src/main/resources/static/sys/aComConfig/js/excelCharacterLevel.js
  38. 9 7
      src/main/resources/static/sys/aComConfig/js/excelProp.js
  39. 10 9
      src/main/resources/view/sys/aComConfig/excelCharacterLevel.html
  40. 16 8
      src/main/resources/view/sys/aComConfig/excelProp.html

+ 5 - 0
src/main/java/com/td/Dawa/BossApplication.java

@@ -179,6 +179,11 @@ class IndexController {
                 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());
+
+
                 //获取本机内网IP
                 log.info("启动成功:" + "http://" + InetAddress.getLocalHost().getHostAddress() + ":" + port + contextPath);
             } catch (UnknownHostException e) {

+ 22 - 0
src/main/java/com/td/Dawa/common/pojo/PageInfo.java

@@ -5,6 +5,7 @@ import lombok.Data;
 import org.hibernate.query.internal.NativeQueryImpl;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
 import org.springframework.data.repository.support.PageableExecutionUtils;
 
 import javax.persistence.EntityManager;
@@ -42,6 +43,27 @@ public class PageInfo<M> {
         return pageInfo;
     }
 
+    /**
+     * 设置当前页面的content
+     * @param page
+     * @param content
+     * @param <M>
+     * @return
+     */
+    public static <M> PageInfo<M> customContent(Page page, List<M> content) {
+        int records = (int) page.getTotalElements();
+        int pageSize = page.getSize();
+        int total = records % pageSize == 0 ? records / pageSize : records / pageSize + 1;
+
+        PageInfo<M> pageInfo = new PageInfo<>();
+        pageInfo.setPage(page.getNumber() + 1);//页码
+        pageInfo.setPageSize(pageSize);//页面大小
+        pageInfo.setRows(content);//分页结果
+        pageInfo.setRecords(records);//总记录数
+        pageInfo.setTotal(total);//总页数
+        return pageInfo;
+    }
+
     /**
      * 获取JPA的分页对象
      */

+ 2 - 0
src/main/java/com/td/Dawa/common/service/CommonService.java

@@ -17,6 +17,8 @@ public interface CommonService<V, E,T> {
 
     Result<PageInfo<V>> page(V entityVo);
 
+    PageInfo<V> pageByClass(V entityVo, Class entityModelClass);
+
     Result<List<V>> list(V entityVo);
 
 

+ 11 - 0
src/main/java/com/td/Dawa/common/service/CommonServiceImpl.java

@@ -69,6 +69,17 @@ public class CommonServiceImpl<V, E, T> implements CommonService<V, E, T> {
         return Result.of(PageInfo.of(page, entityVoClass));
     }
 
+    @Override
+    public PageInfo<V> pageByClass(V entityVo, Class entityModelClass) {
+        //实体类缺失分页信息
+        if (!(entityVo instanceof PageCondition)) {
+            throw new RuntimeException("实体类" + entityVoClass.getName() + "未继承PageCondition。");
+        }
+        PageCondition pageCondition = (PageCondition) entityVo;
+        Page<E> page = commonRepository.findAll(Example.of(CopyUtil.copy(entityVo, entityClass)), pageCondition.getPageable());
+        return PageInfo.of(page, entityModelClass);
+    }
+
     @Override
     public Result<List<V>> list(V entityVo) {
         List<E> entityList = commonRepository.findAll(Example.of(CopyUtil.copy(entityVo, entityClass)));

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

@@ -17,6 +17,8 @@ public enum GameEnum {
     REDIS_KEY_EXCEL_SCENE(1,"scene"),//场景信息表key
     REDIS_KEY_EXCEL_PROP(2,"prop"),//场景道具表key
     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
 
     CHARACTERS_STATE_NORMAL(0,"角色普通状态"),
     CHARACTERS_STATE_TRADE_BANK(1,"角色在交易行状态"),

+ 2 - 0
src/main/java/com/td/Dawa/config/enums/ResultEnum.java

@@ -52,6 +52,8 @@ public enum ResultEnum {
     PLAYER_ATTRIBUTE_STRENGTH_IS_NOT(518,"当前体力不足,队伍无法工作"),
     PLAYER_GOODS_SAVE_LOCK(520,"操作繁忙,保存背包失败,稍后再试!"),
     PLAYER_ATTRIBUTE_SAVE_LOCK(520,"属性操作繁满,稍后再试!"),
+    //背包
+    PLAYER_BACKPACK_ERROR(510,"背包异常"),
 
     ROLE_DOES_NOT_EXIST(521,"不存在角色信息!"),
     ROLE_PRO_DOES_NOT_EXIST(521,"不存在角色职业信息!"),

+ 1 - 1
src/main/java/com/td/Dawa/game/comcharacters/service/ComCharactersService.java

@@ -14,7 +14,7 @@ public interface ComCharactersService extends CommonService<ComCharactersVo, Com
 
     public List<ComCharactersRandomVo> randomRoleByNumber(Integer number);
 
-    public List<ComCharactersClientVo> findByProfessionalSort(String userId,Integer professional);
+    public List<ComCharactersClientVo> findByProfessionalSort(String userId,Integer attribute);
 
     public ComCharactersClientVo addRole(ExcelCharacterAttriVo _attr, String userId);
 

+ 179 - 105
src/main/java/com/td/Dawa/game/comcharacters/service/ComCharactersServiceImpl.java

@@ -2,14 +2,11 @@ package com.td.Dawa.game.comcharacters.service;
 
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.ArrayUtil;
 import com.td.Dawa.annotation.In;
 import com.td.Dawa.common.service.*;
 import com.td.Dawa.config.enums.GameEnum;
 import com.td.Dawa.game.comcharacters.pojo.ComCharacters;
-import com.td.Dawa.game.comcharacters.vo.ComCharactersClientVo;
-import com.td.Dawa.game.comcharacters.vo.ComCharactersRandomVo;
-import com.td.Dawa.game.comcharacters.vo.ComCharactersVo;
+import com.td.Dawa.game.comcharacters.vo.*;
 import com.td.Dawa.game.comcharacters.repository.ComCharactersRepository;
 import com.td.Dawa.game.excelcharacterattri.pojo.ExcelCharacterAttri;
 import com.td.Dawa.game.excelcharacterattri.repository.ExcelCharacterAttriRepository;
@@ -20,12 +17,13 @@ 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.excelcharactercreate.vo.ExcelCharacterCreateClientVo;
 import com.td.Dawa.game.excelcharacterlevel.service.ExcelCharacterLevelService;
 import com.td.Dawa.game.excelcharacterlevel.vo.ExcelCharacterLevelVo;
+import com.td.Dawa.game.excelresources.pojo.ExcelResources;
 import com.td.Dawa.game.excelresources.service.ExcelResourcesService;
 import com.td.Dawa.game.excelresources.vo.ExcelResourcesClientVo;
 import com.td.Dawa.util.CopyUtil;
+import com.td.Dawa.util.ProbabilityIntervalUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.hibernate.query.criteria.internal.CriteriaBuilderImpl;
 import org.hibernate.query.criteria.internal.expression.function.BasicFunctionExpression;
@@ -124,7 +122,6 @@ public class ComCharactersServiceImpl extends CommonServiceImpl<ComCharactersVo,
 
         //随机一个力量值,添加到后面的属性上
         comCharacters.setRandom(_attr.getRandomAttr());
-
         //力量
         Double _random1 = new Random().nextDouble() * _attr.getRandomAttr();
         Double _powerDouble = _random1 + _attr.getStartPowerLimitLower();
@@ -138,40 +135,30 @@ public class ComCharactersServiceImpl extends CommonServiceImpl<ComCharactersVo,
         Double _skillsDouble = _random3 + _attr.getStartSkillLimitLower();
         comCharacters.setSkills(_skillsDouble.intValue());
 
-
-        //tring[] itemArray = _attr.getProfessional().split("\\|");
-        //int a = (int) Math.floor(new Random().nextDouble() * itemArray.length);
-        //Integer.parseInt(itemArray[a])
         comCharacters.setProfessional(0);//这里不区分职业,直接记录一个默认值,进行队伍配置时候,设置一个 1,2,3,4(挖矿,勘探,运输,伐木)
         comCharacters.setWorkPos(0);//记录一个默认没有位置
         comCharacters.setAction(_attr.getAction());
-
         comCharacters.setInteractive(_attr.getInteractive());
         comCharacters.setState(0);
 
-        //随机生成一套model,todo 暂时固定7个,
+        //设置经验和等级
+        comCharacters.setExp(0);
+        comCharacters.setLevel(1);
 
-        List<ExcelCharacterColor> colorListVo = new ArrayList<>();
+        //随机生成一套model
         List<String> colorIdList = new ArrayList<>();
-        //全部颜色
-        List<ExcelCharacterColor> characterColorList = excelCharacterColorService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_COLOR.getMessage());
-        List<ExcelCharacterCreate> _list = excelCharacterCreateService.findAll();
-        List<ExcelCharacterCreate> _genList = generateCharacterModels(_list);
+
+        //生成配件
+        List<ComCharactersResourcesVo> _genList = generateCharacterModels();
         List<String> modelList = _genList.stream().map(e -> {
-            //创建对应的颜色
-            ExcelCharacterColor _color = characterColorList.get((int) (Math.random() * characterColorList.size()));
-            colorListVo.add(_color);
-            colorIdList.add(_color.getId().toString());
-            return e.getModel().toString();
+            colorIdList.add(e.getColorIds());
+            return e.getArtId().toString();
         }).collect(Collectors.toList());
+
         comCharacters.setModelId(String.join("|", modelList));
         //记录颜色id
         comCharacters.setModelColor(String.join("|", colorIdList));
 
-        //设置经验和等级
-        comCharacters.setExp(0);
-        comCharacters.setLevel(1);
-
         comCharacters.setCreateTime(DateUtil.date());
         comCharacters.setUpdateTime(DateUtil.date());
         comCharacters = comCharactersRepository.saveAndFlush(comCharacters);
@@ -183,20 +170,8 @@ public class ComCharactersServiceImpl extends CommonServiceImpl<ComCharactersVo,
         //设置第二级的升级经验
         ExcelCharacterLevelVo excelCharacterLevelVo = excelCharacterLevelService.getVo(2);
         clientVo.setLevelUpExp(excelCharacterLevelVo.getExp());
-        //clientVo.setSubCreateClientList(CopyUtil.copyList(_list, ExcelCharacterCreateClientVo.class));
-        //对应资源
-        Integer[] _modelIdArray = Convert.toIntArray(comCharacters.getModelId().split("\\|"));
-        final int[] index = {0};
-        List<ExcelResourcesClientVo> resourcesList = excelResourcesService.findByArtIdIn(_modelIdArray).stream().map(_res -> {
-            ExcelCharacterCreate excelCharacterCreate = _genList.stream().filter(_gen -> _gen.getModel().equals(_res.getArtId())).findFirst().get();
-
-            _res.setPosition(excelCharacterCreate.getPosition());
-            _res.setCharacterColor(CopyUtil.copy(colorListVo.get(index[0]), ExcelCharacterColorClientVo.class));
-            index[0]++;
-            log.info(index[0] + "");
-            return _res;
-        }).collect(Collectors.toList());
-        clientVo.setSubResourcesClientList(resourcesList);
+
+        clientVo.setSubResourcesClientList(_genList);
 
         return clientVo;
     }
@@ -208,35 +183,32 @@ public class ComCharactersServiceImpl extends CommonServiceImpl<ComCharactersVo,
     }
 
     /**
-     * 根据 工作类型返回对应的属性排名
+     * 根据类型返回对应的排名
+     * 相同条件按创建时间处理
      * @param userId
-     * @param professional
+     * @param attribute
      * @return
      */
     @Override
-    public List<ComCharactersClientVo> findByProfessionalSort(String userId, Integer professional) {
+    public List<ComCharactersClientVo> findByProfessionalSort(String userId, Integer attribute) {
         String _properties = "power";//默认power排序
-        if (professional.equals(GameEnum.PRO_POWER.getValue())) {
+        if (attribute.equals(GameEnum.PRO_POWER.getValue())) {
             _properties = "power";
-        } else if (professional.equals(GameEnum.PRO_INTELLIGENCE.getValue())) {
+        } else if (attribute.equals(GameEnum.PRO_INTELLIGENCE.getValue())) {
             _properties = "intelligence";
-        } else if (professional.equals(GameEnum.PRO_SKIlLS.getValue())) {
+        } else if (attribute.equals(GameEnum.PRO_SKIlLS.getValue())) {
             _properties = "skills";
+        } else if (attribute.equals(3)) {
+            //等级排序
+            _properties = "level";
         }
-        List<ComCharacters> comCharactersList = comCharactersRepository.findAllByUserId(userId, Sort.by(Sort.Direction.DESC, _properties));
+        List<Sort.Order> sortOrder = new ArrayList<>();
+        sortOrder.add(new Sort.Order(Sort.Direction.DESC, _properties));
+        sortOrder.add(new Sort.Order(Sort.Direction.ASC,"createTime"));
+        List<ComCharacters> comCharactersList = comCharactersRepository.findAllByUserId(userId, Sort.by(sortOrder));
         List<ComCharactersClientVo> comCharactersClientVos = comCharactersList.stream().map(e -> {
-            ComCharactersClientVo comCharactersClientVo = new ComCharactersClientVo();
-            comCharactersClientVo = CopyUtil.copy(e, ComCharactersClientVo.class);
+            ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(e, ComCharactersClientVo.class);
             comCharactersClientVo = addSubResourcesClientListToVO(comCharactersClientVo, e.getModelId(), e.getModelColor());
-            //Integer[] _modelIdArray = Convert.toIntArray(e.getModelId().split("\\|"));
-            ////查询position
-            //List<ExcelCharacterCreate> _genList =  excelCharacterCreateService.findByModelIn(_modelIdArray);
-            //List<ExcelResourcesClientVo> resourcesList = excelResourcesService.findByArtIdIn(_modelIdArray).stream().map(_res->{
-            //    ExcelCharacterCreate excelCharacterCreate = _genList.stream().filter(_gen->_gen.getModel().equals(_res.getArtId())).findFirst().get();
-            //    _res.setPosition(excelCharacterCreate.getPosition());
-            //    return _res;
-            //}).collect(Collectors.toList());
-            //comCharactersClientVo.setSubResourcesClientList(resourcesList);
             return comCharactersClientVo;
         }).collect(Collectors.toList());
         return comCharactersClientVos;
@@ -249,53 +221,110 @@ public class ComCharactersServiceImpl extends CommonServiceImpl<ComCharactersVo,
     }
 
     /**
-     * 生成 7个配件
+     * 生成 7个配件,颜色,位置
      *
-     * @param _allList
      * @return
      */
-    private List<ExcelCharacterCreate> generateCharacterModels(List<ExcelCharacterCreate> _allList) {
+    private List<ComCharactersResourcesVo> generateCharacterModels() {
+        //全部颜色,并计算两个主副颜色
+        List<ExcelCharacterColor> _allColors = excelCharacterColorService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_COLOR.getMessage());
+        ExcelCharacterColor _AColor = _allColors.get((int) (Math.random() * _allColors.size())); //耳朵,花纹A主色,B副色
+        List<ExcelCharacterColor> _bColorList = _allColors.stream().filter(e -> !e.getId().equals(_AColor.getId())).collect(Collectors.toList());
+        ExcelCharacterColor _BColor = _bColorList.get((int) (Math.random() * _bColorList.size()));//不与A重复的花纹花色B
+        //生产和资源
+        List<ExcelCharacterCreate> _allCreates = excelCharacterCreateService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_CREATE.getMessage());
+        List<ExcelResources> _allResources = excelResourcesService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_RESOURCES.getMessage());
+        //获取模型资源
+        List<ExcelResources> roleResources = _allResources.stream().filter(e -> e.getArtType().equals(5)).collect(Collectors.toList());
+        List<Integer> roleArtIds = roleResources.stream().map(ExcelResources::getArtId).collect(Collectors.toList());
+        //输出对象list
+        List<ComCharactersInfoVo> infoList = new ArrayList<>();
         List<ExcelCharacterCreate> _currentCharacters = new ArrayList<>();
         //1.生成瞳孔
         //权重计算,当前有20个权重1,9个权重6,4个权重5,加起来值是100
-        List<ExcelCharacterCreate> pupilAll = _allList.stream().filter(e -> e.getPosition().equals(1)).collect(Collectors.toList());
-        ExcelCharacterCreate pupil = pupilAll.get((int) (Math.random() * pupilAll.size()));
-        //左右瞳孔 todo 颜色区分
-        _currentCharacters.add(pupil);
-        _currentCharacters.add(pupil);
-        //2.生成耳朵
-        List<ExcelCharacterCreate> earsAll = _allList.stream().filter(e -> e.getPosition().equals(2)).collect(Collectors.toList());
-        ExcelCharacterCreate ears = earsAll.get((int) (Math.random() * earsAll.size()));
-        _currentCharacters.add(ears);
-        _currentCharacters.add(ears);
+        List<ExcelCharacterCreate> pupilAll = _allCreates.stream().filter(e -> e.getPosition().equals(1)).collect(Collectors.toList());
+        //ExcelCharacterCreate pupil = pupilAll.get((int) (Math.random() * pupilAll.size()));
+        ExcelCharacterCreate pupil = ProbabilityIntervalUtil.getRolePos(pupilAll);
+        //左右瞳孔 todo 可能需要颜色区分
+        //_currentCharacters.add(pupil);
+        //_currentCharacters.add(pupil);
+        //瞳孔 独立色
+        ExcelCharacterColor _pupilColor = _allColors.get((int) (Math.random() * _allColors.size()));
+        infoList.add(new ComCharactersInfoVo(pupil, _pupilColor, false));
+        infoList.add(new ComCharactersInfoVo(pupil, _pupilColor, true));
 
+        //2.生成耳朵
+        List<ExcelCharacterCreate> earsAll = _allCreates.stream().filter(e -> e.getPosition().equals(2)).collect(Collectors.toList());
+        ExcelCharacterCreate ears = ProbabilityIntervalUtil.getRolePos(earsAll);// earsAll.get((int) (Math.random() * earsAll.size()));
+        //_currentCharacters.add(ears);
+        //_currentCharacters.add(ears);
+        //A色一致
+        infoList.add(new ComCharactersInfoVo(ears, _AColor, false));
+        infoList.add(new ComCharactersInfoVo(ears, _AColor, true));
         //3.生成眉毛
-        List<ExcelCharacterCreate> eyebrowAll = _allList.stream().filter(e -> e.getPosition().equals(3)).collect(Collectors.toList());
-        ExcelCharacterCreate eyebrow = eyebrowAll.get((int) (Math.random() * eyebrowAll.size()));
-        _currentCharacters.add(eyebrow);
-        _currentCharacters.add(eyebrow);
-
+        List<ExcelCharacterCreate> eyebrowAll = _allCreates.stream().filter(e -> e.getPosition().equals(3)).collect(Collectors.toList());
+        ExcelCharacterCreate eyebrow = ProbabilityIntervalUtil.getRolePos(eyebrowAll);// eyebrowAll.get((int) (Math.random() * eyebrowAll.size()));
+        //_currentCharacters.add(eyebrow);
+        //_currentCharacters.add(eyebrow);
+        ExcelCharacterColor _black = _allColors.get(75);//todo 后面改个固定值地方
+        infoList.add(new ComCharactersInfoVo(eyebrow, _black, false));
+        infoList.add(new ComCharactersInfoVo(eyebrow, _black, true));
         //4.生成吻部
-        List<ExcelCharacterCreate> snoutAll = _allList.stream().filter(e -> e.getPosition().equals(4)).collect(Collectors.toList());
-        ExcelCharacterCreate snout = snoutAll.get((int) (Math.random() * snoutAll.size()));
-        _currentCharacters.add(snout);
-
+        List<ExcelCharacterCreate> snoutAll = _allCreates.stream().filter(e -> e.getPosition().equals(4)).collect(Collectors.toList());
+        ExcelCharacterCreate snout = ProbabilityIntervalUtil.getRolePos(snoutAll);//snoutAll.get((int) (Math.random() * snoutAll.size()));
+        //_currentCharacters.add(snout);
+        //独立色
+        ExcelCharacterColor _snoutColor = _allColors.get((int) (Math.random() * _allColors.size()));
+        infoList.add(new ComCharactersInfoVo(snout, _snoutColor));
         //5.生成花纹
-        List<ExcelCharacterCreate> decorativePatternAll = _allList.stream().filter(e -> e.getPosition().equals(5)).collect(Collectors.toList());
-        ExcelCharacterCreate decorativePattern = decorativePatternAll.get((int) (Math.random() * decorativePatternAll.size()));
-        _currentCharacters.add(decorativePattern);
+        List<ExcelCharacterCreate> decorativePatternAll = _allCreates.stream().filter(e -> e.getPosition().equals(5)).collect(Collectors.toList());
+        ExcelCharacterCreate decorativePattern = ProbabilityIntervalUtil.getRolePos(decorativePatternAll); // decorativePatternAll.get((int) (Math.random() * decorativePatternAll.size()));
+        //_currentCharacters.add(decorativePattern);
+        infoList.add(new ComCharactersInfoVo(decorativePattern, _AColor, _BColor));
 
         //6.生成轮廓
-        List<ExcelCharacterCreate> outLineAll = _allList.stream().filter(e -> e.getPosition().equals(6)).collect(Collectors.toList());
-        ExcelCharacterCreate outLine = outLineAll.get((int) (Math.random() * outLineAll.size()));
-        _currentCharacters.add(outLine);
-
+        List<ExcelCharacterCreate> outLineAll = _allCreates.stream().filter(e -> e.getPosition().equals(6)).collect(Collectors.toList());
+        ExcelCharacterCreate outLine = ProbabilityIntervalUtil.getRolePos(outLineAll);//outLineAll.get((int) (Math.random() * outLineAll.size()));
+        //_currentCharacters.add(outLine);
+        //独立色
+        ExcelCharacterColor _outLineColor = _allColors.get((int) (Math.random() * _allColors.size()));
+        infoList.add(new ComCharactersInfoVo(outLine, _outLineColor));
         //7.生成尾巴
-        List<ExcelCharacterCreate> tailAll = _allList.stream().filter(e -> e.getPosition().equals(7)).collect(Collectors.toList());
-        ExcelCharacterCreate tail = tailAll.get((int) (Math.random() * tailAll.size()));
-        _currentCharacters.add(tail);
+        List<ExcelCharacterCreate> tailAll = _allCreates.stream().filter(e -> e.getPosition().equals(7)).collect(Collectors.toList());
+        ExcelCharacterCreate tail = ProbabilityIntervalUtil.getRolePos(tailAll);//tailAll.get((int) (Math.random() * tailAll.size()));
+        //_currentCharacters.add(tail);
+        //独立色
+        ExcelCharacterColor _tailColor = _allColors.get((int) (Math.random() * _allColors.size()));
+        //主副色。主色与A色一致,副色为独立色
+        infoList.add(new ComCharactersInfoVo(tail, _AColor, _tailColor));
+
+        //拿到当前对应的resources 资源
+        List<ComCharactersInfoVo> resourcesList = infoList.stream().map(_res -> {
+            ExcelResources excelResources = roleResources.get(roleArtIds.indexOf(_res.getSubCreate().getModel()));
+            _res.setSubResources(excelResources);
+            return _res;
+        }).collect(Collectors.toList());
+
+
+        //对应资源
+        List<ComCharactersResourcesVo> resourcesList2 = resourcesList.stream().map(_res -> {
+            ComCharactersResourcesVo excelResourcesClientVo = new ComCharactersResourcesVo();
+            excelResourcesClientVo = CopyUtil.copy(_res.getSubResources(), ComCharactersResourcesVo.class);
+            excelResourcesClientVo.setPosition(_res.getSubCreate().getPosition());
+            excelResourcesClientVo.setCharacterColor(CopyUtil.copy(_res.getSubPrimaryColor(), ExcelCharacterColorClientVo.class));
+            excelResourcesClientVo.setNote(_res.getSubResources().getNote());
+            if (_res.getSubSecondaryColor() != null) {
+                excelResourcesClientVo.setCharacterSecondaryColor(CopyUtil.copy(_res.getSubSecondaryColor(), ExcelCharacterColorClientVo.class));
+                //如果有两个颜色id这记录
+                excelResourcesClientVo.setColorIds(_res.getSubPrimaryColor().getId() + "," + _res.getSubSecondaryColor().getId());
+            } else {
+                excelResourcesClientVo.setColorIds(_res.getSubPrimaryColor().getId().toString());
+            }
+            excelResourcesClientVo.setIsTheRight(_res.getIsTheRight());
+            return excelResourcesClientVo;
+        }).collect(Collectors.toList());
 
-        return _currentCharacters;
+        return resourcesList2;
     }
 
     /**
@@ -308,23 +337,68 @@ public class ComCharactersServiceImpl extends CommonServiceImpl<ComCharactersVo,
     @Override
     public ComCharactersClientVo addSubResourcesClientListToVO(ComCharactersClientVo comCharactersClientVo, String _modelIdStr, String _modelColorStr) {
         Integer[] _modelIdArray = Convert.toIntArray(_modelIdStr.split("\\|"));
-        //查询position
-        List<ExcelCharacterCreate> _genList = excelCharacterCreateService.findByModelIn(_modelIdArray);
-
         List<ExcelCharacterColor> allColorList = excelCharacterColorService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_COLOR.getMessage());
+        List<Integer> allColorIdList = allColorList.stream().map(ExcelCharacterColor::getId).collect(Collectors.toList());
+        // 1,2|主,副颜色
         List<String> _colorList = Arrays.asList(_modelColorStr.split("\\|"));
-        List<ExcelCharacterColor> allExcelProps = allColorList.stream().filter(e -> _colorList.contains(e.getId().toString())).collect(Collectors.toList());
-
-
-        final int[] index = {0};
-        List<ExcelResourcesClientVo> resourcesList = excelResourcesService.findByArtIdIn(_modelIdArray).stream().map(_res -> {
-            ExcelCharacterCreate excelCharacterCreate = _genList.stream().filter(_gen -> _gen.getModel().equals(_res.getArtId())).findFirst().get();
-            _res.setPosition(excelCharacterCreate.getPosition());
-
-            _res.setCharacterColor(CopyUtil.copy(allExcelProps.get(index[0]), ExcelCharacterColorClientVo.class));
-            index[0]++;
-            return _res;
+        List<String> _primaryColorList = new ArrayList<>();
+        List<String> _secondaryColorList = new ArrayList<>();
+        _colorList.stream().map(e -> {
+            String[] _colorIds = e.split(",");
+            if (_colorIds.length >= 2) {
+                _primaryColorList.add(_colorIds[0]);
+                _secondaryColorList.add(_colorIds[1]);
+            } else {
+                _primaryColorList.add(_colorIds[0]);
+                _secondaryColorList.add("");
+            }
+
+            return e;
         }).collect(Collectors.toList());
+        List<ExcelCharacterColor> allPrimaryColors = _primaryColorList.stream().map(e -> allColorList.get(allColorIdList.indexOf(Integer.parseInt(e)))).collect(Collectors.toList());
+        List<ExcelCharacterColor> allSecondaryColors = new ArrayList<>();
+        for (String id : _secondaryColorList) {
+            if (StringUtils.hasText(id)&&allColorIdList.contains(Integer.parseInt(id))) {
+                ExcelCharacterColor _color = allColorList.get(allColorIdList.indexOf(Integer.parseInt(id)));
+                allSecondaryColors.add(_color);
+            }else{
+                allSecondaryColors.add(null);
+            }
+        }
+        //查询position
+        List<ExcelCharacterCreate> _genList = excelCharacterCreateService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_CHARACTER_CREATE.getMessage());
+        List<Integer> characterModelIdList = _genList.stream().map(ExcelCharacterCreate::getModel).collect(Collectors.toList());
+        List<ExcelResources> allResourcesList = excelResourcesService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_RESOURCES.getMessage());
+        List<Integer> allResourcesArtIdList = allResourcesList.stream().map(ExcelResources::getArtId).collect(Collectors.toList());
+        List<ComCharactersResourcesVo> resourcesList = new ArrayList<>();
+        for(int i = 0;i<_modelIdArray.length;i++){
+            Integer ids = _modelIdArray[i];
+            Integer currentIndex = i+1;
+            ExcelResources excelResources =  allResourcesList.get(allResourcesArtIdList.indexOf(ids));
+            ExcelCharacterCreate excelCharacterCreate = _genList.get(characterModelIdList.indexOf(ids));
+            ComCharactersResourcesVo excelResourcesClientVo = CopyUtil.copy(excelResources, ComCharactersResourcesVo.class);
+            //简单按顺序区分左右,通常第一个就是左边
+            switch (currentIndex) {
+                case 1:
+                case 3:
+                case 5:
+                    excelResourcesClientVo.setIsTheRight(false);
+                    break;
+                case 2:
+                case 4:
+                case 6:
+                    excelResourcesClientVo.setIsTheRight(true);
+                    break;
+            }
+            excelResourcesClientVo.setNote(excelResources.getNote());
+            excelResourcesClientVo.setColorIds(_colorList.get(i));
+            excelResourcesClientVo.setPosition(excelCharacterCreate.getPosition());
+            excelResourcesClientVo.setCharacterColor(CopyUtil.copy(allPrimaryColors.get(i), ExcelCharacterColorClientVo.class));
+            if (allSecondaryColors.get(i) != null) {
+                excelResourcesClientVo.setCharacterSecondaryColor(CopyUtil.copy(allSecondaryColors.get(i), ExcelCharacterColorClientVo.class));
+            }
+            resourcesList.add(excelResourcesClientVo);
+        }
         comCharactersClientVo.setSubResourcesClientList(resourcesList);
         return comCharactersClientVo;
     }

+ 1 - 1
src/main/java/com/td/Dawa/game/comcharacters/vo/ComCharactersClientVo.java

@@ -47,7 +47,7 @@ public class ComCharactersClientVo implements Serializable {
 
     private List<ExcelCharacterCreateClientVo> subCreateClientList;
 
-    private List<ExcelResourcesClientVo> subResourcesClientList;
+    private List<ComCharactersResourcesVo> subResourcesClientList;
 
     //private Date createTime;//
     //

+ 52 - 0
src/main/java/com/td/Dawa/game/comcharacters/vo/ComCharactersInfoVo.java

@@ -0,0 +1,52 @@
+package com.td.Dawa.game.comcharacters.vo;
+
+import com.td.Dawa.game.excelcharactercolor.pojo.ExcelCharacterColor;
+import com.td.Dawa.game.excelcharactercreate.pojo.ExcelCharacterCreate;
+import com.td.Dawa.game.excelcharactercreate.vo.ExcelCharacterCreateClientVo;
+import com.td.Dawa.game.excelcharactercreate.vo.ExcelCharacterCreateVo;
+import com.td.Dawa.game.excelresources.pojo.ExcelResources;
+import com.td.Dawa.game.excelresources.vo.ExcelResourcesClientVo;
+import com.td.Dawa.game.excelresources.vo.ExcelResourcesVo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class ComCharactersInfoVo implements Serializable {
+
+    //生成信息
+    private ExcelCharacterCreate subCreate;
+    //资源信息
+    private ExcelResources subResources;
+    //主颜色信息
+    private ExcelCharacterColor subPrimaryColor;
+    //副颜色信息
+    private ExcelCharacterColor subSecondaryColor;
+    //在右边
+    private Boolean isTheRight;
+
+    public ComCharactersInfoVo(ExcelCharacterCreate subCreate,ExcelCharacterColor subPrimaryColor){
+        this.subCreate = subCreate;
+        this.subPrimaryColor = subPrimaryColor;
+    }
+
+    public ComCharactersInfoVo(ExcelCharacterCreate subCreate,ExcelCharacterColor subPrimaryColor,ExcelCharacterColor subSecondaryColor){
+        this.subCreate = subCreate;
+        this.subPrimaryColor = subPrimaryColor;
+        this.subSecondaryColor = subSecondaryColor;
+    }
+
+    public ComCharactersInfoVo(ExcelCharacterCreate subCreate,ExcelCharacterColor subPrimaryColor,Boolean isTheRight){
+        this.subCreate = subCreate;
+        this.subPrimaryColor = subPrimaryColor;
+        this.isTheRight = isTheRight;
+    }
+
+    public ComCharactersInfoVo(ExcelCharacterCreate subCreate,ExcelCharacterColor subPrimaryColor,ExcelCharacterColor subSecondaryColor,Boolean isTheRight){
+        this.subCreate = subCreate;
+        this.subPrimaryColor = subPrimaryColor;
+        this.subSecondaryColor = subSecondaryColor;
+        this.isTheRight = isTheRight;
+    }
+}

+ 37 - 0
src/main/java/com/td/Dawa/game/comcharacters/vo/ComCharactersResourcesVo.java

@@ -0,0 +1,37 @@
+package com.td.Dawa.game.comcharacters.vo;
+
+import com.td.Dawa.game.excelcharactercolor.pojo.ExcelCharacterColor;
+import com.td.Dawa.game.excelcharactercolor.vo.ExcelCharacterColorClientVo;
+import com.td.Dawa.game.excelcharactercreate.pojo.ExcelCharacterCreate;
+import com.td.Dawa.game.excelresources.pojo.ExcelResources;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ComCharactersResourcesVo implements Serializable {
+
+    private Integer artId;//art编号
+
+    private Integer artType;//美术资源种类(1:场景,2:动作,3:特效,4:图标, 5:模型)
+
+    //private String artName;//美术资源名
+
+    //private Integer artActionFrame;//帧数
+
+    //private String artLocal;//资源位置
+
+    private Integer position;//部位
+
+    private String colorIds;//当前部位的颜色id
+
+    //在右边
+    private Boolean isTheRight;
+
+    private ExcelCharacterColorClientVo characterColor;//主颜色信息
+
+    private ExcelCharacterColorClientVo characterSecondaryColor;//副颜色信息
+
+    private String note;//备注
+
+}

+ 21 - 0
src/main/java/com/td/Dawa/game/comcharactersdiscovery/controller/ComCharactersDiscoveryController.java

@@ -162,4 +162,25 @@ public class ComCharactersDiscoveryController extends CommonController<ComCharac
 
     }
 
+    @PostMapping("updatePropsState")
+    @Decrypt
+    @Encrypt
+    public Result<?> updatePropsState(@RequestParam(value = "userId") String userId,
+                                 @RequestParam(value = "explorationId") Integer explorationId,
+                                 @RequestParam(value = "isStop", defaultValue = "false") Boolean isStop) {
+        try {
+            //查看是否存在勘探数据
+            ComCharactersDiscoveryVo discoveryVo = comCharactersDiscoveryService.getVo(explorationId);
+            if (discoveryVo == null || !discoveryVo.getUserId().equals(userId)) {
+                throw new RuntimeException("勘探队伍不存在!");
+            }
+            //计算收益updateState
+            return Result.of(comCharactersDiscoveryService.explorationState(discoveryVo, isStop));
+        } catch (AuthorizeException e) {
+            return Result.of(null, false, e.getMessage(), e.getCode());
+        } catch (Exception e) {
+            return Result.of(e.getMessage(), false, ResultEnum.EXPLORATION_ERROR);
+        }
+
+    }
 }

+ 2 - 0
src/main/java/com/td/Dawa/game/comcharactersdiscovery/service/ComCharactersDiscoveryService.java

@@ -17,4 +17,6 @@ public interface ComCharactersDiscoveryService extends CommonService<ComCharacte
 
     ComCharactersDiscoveryClientVo explorationState(ComCharactersDiscoveryVo discoveryVo,Boolean isStop);
 
+    ComCharactersDiscoveryClientVo explorationPropsState(ComCharactersDiscoveryVo discoveryVo,Boolean isStop);
+
 }

+ 236 - 212
src/main/java/com/td/Dawa/game/comcharactersdiscovery/service/ComCharactersDiscoveryServiceImpl.java

@@ -18,28 +18,27 @@ import com.td.Dawa.game.comcharactersdiscovery.pojo.ComCharactersDiscovery;
 import com.td.Dawa.game.comcharactersdiscovery.vo.ComCharactersDiscoveryClientVo;
 import com.td.Dawa.game.comcharactersdiscovery.vo.ComCharactersDiscoveryVo;
 import com.td.Dawa.game.comcharactersdiscovery.repository.ComCharactersDiscoveryRepository;
+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.excelcharactercreate.pojo.ExcelCharacterCreate;
 import com.td.Dawa.game.excelcharactercreate.service.ExcelCharacterCreateService;
 import com.td.Dawa.game.excelcharacterlevel.service.ExcelCharacterLevelService;
 import com.td.Dawa.game.excelcharacterlevel.vo.ExcelCharacterLevelVo;
-import com.td.Dawa.game.exceldrop.pojo.ExcelDrop;
 import com.td.Dawa.game.exceldrop.service.ExcelDropService;
-import com.td.Dawa.game.exceldrop.vo.ExcelDropClientVo;
 import com.td.Dawa.game.excelparameter.service.ExcelParameterService;
 import com.td.Dawa.game.excelparameter.vo.ExcelParameterVo;
 import com.td.Dawa.game.excelprop.pojo.ExcelProp;
 import com.td.Dawa.game.excelprop.service.ExcelPropService;
+import com.td.Dawa.game.excelprop.vo.ExcelPropAndProVo;
 import com.td.Dawa.game.excelprop.vo.ExcelPropClientVo;
 import com.td.Dawa.game.excelresources.service.ExcelResourcesService;
-import com.td.Dawa.game.excelresources.vo.ExcelResourcesClientVo;
 import com.td.Dawa.game.excelscene.pojo.ExcelScene;
 import com.td.Dawa.game.excelscene.service.ExcelSceneService;
 import com.td.Dawa.game.excelworkpro.pojo.ExcelWorkPro;
 import com.td.Dawa.game.excelworkpro.service.ExcelWorkProService;
-import com.td.Dawa.game.excelworkpro.vo.ExcelWorkProVo;
 import com.td.Dawa.util.CopyUtil;
+import com.td.Dawa.util.ProbabilityIntervalUtil;
 import com.td.Dawa.util.UUIDUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,6 +49,7 @@ import org.springframework.util.StringUtils;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 @Service
@@ -91,6 +91,10 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
     @Autowired
     private ExcelPropService excelPropService;
 
+    @Autowired
+    private ComPlayerBackpackService comPlayerBackpackService;
+
+
     /**
      * 开始工作
      *
@@ -146,15 +150,6 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
             ComCharactersClientVo comCharactersClientVo = new ComCharactersClientVo();
             comCharactersClientVo = CopyUtil.copy(e, ComCharactersClientVo.class);
             comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, e.getModelId(), e.getModelColor());
-            //Integer[] _modelIdArray = Convert.toIntArray(e.getModelId().split("\\|"));
-            ////查询position
-            //List<ExcelCharacterCreate> _genList = excelCharacterCreateService.findByModelIn(_modelIdArray);
-            //List<ExcelResourcesClientVo> resourcesList = excelResourcesService.findByArtIdIn(_modelIdArray).stream().map(_res -> {
-            //    ExcelCharacterCreate excelCharacterCreate = _genList.stream().filter(_gen -> _gen.getModel().equals(_res.getArtId())).findFirst().get();
-            //    _res.setPosition(excelCharacterCreate.getPosition());
-            //    return _res;
-            //}).collect(Collectors.toList());
-            //comCharactersClientVo.setSubResourcesClientList(resourcesList);
             return comCharactersClientVo;
         }).collect(Collectors.toList());
         discoveryClientVo.setSubCharacters(comCharactersClientVos);//当前职业
@@ -266,8 +261,7 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
             for (int i = 0; i < roleId.length; i++) {
                 ComCharactersVo comCharactersVo = comCharactersService.getVo(Integer.parseInt(roleId[i]));
                 ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(comCharactersVo, ComCharactersClientVo.class);
-                //List<ExcelCharacterCreate> subExcelCharacterList = listMap.get(excelCharacterAttr.getRoleType());
-                //character.setSubCreateClientList(CopyUtil.copyList(subExcelCharacterList,ExcelCharacterCreateClientVo.class));
+                comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, comCharactersVo.getModelId(), comCharactersVo.getModelColor());
                 comCharactersClientVos.add(comCharactersClientVo);
             }
             //开始工作时间 + 工作天数
@@ -328,20 +322,16 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
         }
         //todo 经验如何设置
         List<ExcelParameterVo> parameterVos = excelParameterService.list(new ExcelParameterVo()).getData();
-        ExcelParameterVo parameter = parameterVos.get(6); //初始化工作经验
-        Integer outExp = parameter.getValue().intValue();
-        //当前关卡奖励的经验
-        discoveryVo.setRewardExp(outExp);
+
         //todo 获取当前人物等级经验表,待优化
         List<ExcelCharacterLevelVo> excelCharacterLevelVo = excelCharacterLevelService.list(new ExcelCharacterLevelVo()).getData();
-        //已产生的奖励物品
-        String[] _hasDropIds = StringUtils.hasText(discoveryVo.getRewardItem()) ? discoveryVo.getRewardItem().split("\\|") : new String[0];
-        //奖励物品的计数
+        //奖励物品的时间计数
         String[] _hasDropCounts = StringUtils.hasText(discoveryVo.getRewardCount()) ? discoveryVo.getRewardCount().split("\\|") : new String[0];
         //总共参数的奖励物品
         String[] _allDropIds = StringUtils.hasText(discoveryVo.getRewardCount()) ? discoveryVo.getAllItem().split("\\|") : new String[0];
         //记录当前的产出奖励
         List<ExcelPropClientVo> outExcelProps = new ArrayList<>();
+        List<ComPlayerBackpackVo> comPlayerBackpackVoList = new ArrayList<>();
 
         //开始工作时间 + 工作天数
         Date endDate = DateUtil.offsetMillisecond(discoveryVo.getWorkStart(), discoveryVo.getWorkDay());
@@ -368,15 +358,11 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
         //List<ExcelScene> excelSceneList = excelSceneService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_SCENE.getMessage());
         //主场景id
         ExcelScene excelScene = excelSceneService.findBySceneId(discoveryVo.getSceneId());
-        //if (!StringUtils.hasText(excelScene.getSceneEvent())) {
-        //    throw new RuntimeException("scene event 奖励未配置");
-        //}
+        if (excelScene.equals(null)) {
+            throw new RuntimeException("excelScene 未配置!");
+        }
         //获取当前的一个基础数量
         Integer outTransUpperLimit = excelScene.getAmount();
-        //当前场景层级对应的物品
-        //String[] _dropIds = excelScene.getSceneEvent().split("\\|");
-        //List<ExcelDrop> currentSceneExcelDrops = excelDropService.getListByDropIds(Convert.toIntArray(_dropIds));
-
         //获取概率表数据(缓存取)
         List<ExcelWorkPro> workProList = excelWorkProService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_WORK_PRO.getMessage());
         //获取当前道具表
@@ -385,45 +371,31 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
         //已经挖出的全部道具
         List<String> _allDropIdList = Arrays.asList(_allDropIds);
         List<ExcelProp> allExcelProps = propList.stream().filter(e -> _allDropIdList.contains(e.getPropId().toString())).collect(Collectors.toList());
-        // 这里返回的是挖取出来的物品
-        List<ExcelPropClientVo> allPropClientVoList = allExcelProps.stream().map(e -> {
-            ExcelPropClientVo _vo = CopyUtil.copy(e, ExcelPropClientVo.class);
-            _vo.setItemNum(0);
+        List<Integer> allExcelPropsIds = allExcelProps.stream().map(e -> e.getPropId()).collect(Collectors.toList());
+        String[] final_hasDropCounts = _hasDropCounts;
+        AtomicInteger hasDropCountsIndex = new AtomicInteger();
+        List<ExcelPropClientVo> allPropClientVoList = _allDropIdList.stream().map(e -> {
+            ExcelProp excelProp = allExcelProps.get(allExcelPropsIds.indexOf(Integer.parseInt(e)));
+            ExcelPropClientVo _vo = CopyUtil.copy(excelProp, ExcelPropClientVo.class);
+            int _miningInterval = parameterVos.get(3).getValue().intValue();//挖矿时间间隔
+            int _dropCount = Integer.parseInt(ArrayUtil.get(final_hasDropCounts, hasDropCountsIndex.get()));//根据id获取记录的count
+            _vo.setCreateTime(DateUtil.offsetSecond(discoveryVo.getWorkStart(), (_dropCount + 1) * _miningInterval));
+            _vo.setItemNum(1);
+            hasDropCountsIndex.getAndIncrement();
             return _vo;
         }).collect(Collectors.toList());
-        //已经得到的奖励
-        for (int i = 0; i < _hasDropIds.length; i++) {
-            //if (ArrayUtil.contains(_allDropIds, _hasDropIds[i])) {
-            //    int _index = ArrayUtil.indexOf(_allDropIds, _hasDropIds[i]);
-            //    ExcelDropClientVo _dropClientVo = allDropClientVos.get(_index);
-            //    int _dropCount = Integer.parseInt(ArrayUtil.get(_hasDropCounts, i));//根据id获取记录的count
-            //    _dropClientVo.setCount(_dropCount);
-            //    outExcelProps.add(_dropClientVo);
-            //}
-            if (_allDropIdList.contains(_hasDropIds[i])) {
-                int _index = _allDropIdList.indexOf(_hasDropIds[i]);
-                ExcelPropClientVo _dropClientVo = allPropClientVoList.get(_index);
-                int _dropCount = Integer.parseInt(ArrayUtil.get(_hasDropCounts, i));//根据id获取记录的count
-                _dropClientVo.setItemNum(_dropCount);
-                outExcelProps.add(_dropClientVo);
-            }
-
-        }
 
         //当前探索队伍
         String[] roleId = discoveryVo.getRoleId().split("\\|");
         Integer[] _roleIds = Convert.toIntArray(roleId);
-
         //角色list
         List<ComCharactersClientVo> comCharactersClientVos = new ArrayList<>();
 
-
         //先找出三个职业对象
         ComCharactersVo powerChar = null, intelliChar = null, skillChar = null;
         ExcelWorkPro _excelWorkPro = null;
-        String[] _levelItemList = new String[0];
-        List<ExcelProp> currentExcelProps;
-        List<String> _levelPropIds;
+        List<ExcelPropAndProVo> currentPropAndPros;//当前的道具和概率
+
         List<ComCharacters> characters = comCharactersService.findByRoleIdIn(_roleIds);
         //设置一个默认的基础数量
         for (int i = 0; i < characters.size(); i++) {
@@ -431,7 +403,6 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
             //根据当前角色的职业计算
             Integer _professional = comCharactersVo.getProfessional();
             if (_professional.equals(GameEnum.PRO_WORK_TRANSPORT.getValue())) {
-                //_professional.equals(GameEnum.PRO_SKIlLS.getValue()
                 //运输工
                 skillChar = comCharactersVo;
                 //计算当前运输格数,即获取到物品的上限
@@ -442,198 +413,202 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
                 }
             } else if (_professional.equals(GameEnum.PRO_WORK_MINING.getValue()) ||
                     _professional.equals(GameEnum.PRO_WORK_LUMBERING.getValue())) {
-                //_professional.equals(GameEnum.PRO_POWER.getValue())
                 //矿工
                 powerChar = comCharactersVo;
-            } else if (_professional.equals(GameEnum.PRO_WORK_PROSPECT.getValue())) {
-                //_professional.equals(GameEnum.PRO_INTELLIGENCE.getValue())
-                //勘测地形
-                intelliChar = comCharactersVo;
-            }
+                //获取当前工作的效率表
+                _excelWorkPro = getRatioByPowerAndSceneIdAndList(powerChar.getPower(), discoveryVo.getSceneId(), workProList);
 
-        }
-        if (powerChar != null) {
-            //  每3秒执行一次挖矿动作。根据属性数值概率,获得收益
-            //  矿工有休息动作,休息时间3秒
-            // 勘探:
-            Integer _power = powerChar.getPower();
-            //获取当前工作的效率表
-            _excelWorkPro = getRatioByPowerAndSceneIdAndList(_power, discoveryVo.getSceneId(), workProList);
-            //道具和道具对应的概率
-            _levelItemList = _excelWorkPro.getLevelItem().split(",");
-            String _levelProp = ArrayUtil.get(_levelItemList, discoveryVo.getDiscoverLevel() - 1);//获取当前层级的道具
-            String[] _mainAndProp = _levelProp.split("\\|");
-            _levelPropIds = Arrays.asList(ArrayUtil.remove(_mainAndProp, 0)); //对应的id list
-            String _levelSceneId = _mainAndProp[0];//第一个是场景id,移除
-            List<String> final_levelPropIds = _levelPropIds;
-            currentExcelProps = propList.stream().filter(e -> final_levelPropIds.contains(e.getPropId().toString())).collect(Collectors.toList());//过滤后的当前场景可获得的道具
-            String[] _levelProList = _excelWorkPro.getLevelPro().split(",");
-            String _levelPropPro = ArrayUtil.get(_levelProList, discoveryVo.getDiscoverLevel() - 1);//获取当前层级的道具对应的概率
-            String[] _mainAndPropPro = _levelPropPro.split("\\|");
-            List<String> _levelPropProList = Arrays.asList(ArrayUtil.remove(_mainAndPropPro, 0)); //对应的概率id list
-            String _level = _mainAndPropPro[0];//第一个是场景level,移除
-
-            int _miningInterval = parameterVos.get(3).getValue().intValue();//挖矿时间间隔
-            log.info("挖矿间隔时间:" + _miningInterval);
-            int _count = (int) Math.floor(difSecond / _miningInterval); // 一共执行的工作次数和休息
-            log.info("执行的工作次数:" + _count);
-            //按次数执行奖励
-            //对应物品数量少于或等于运输数量
-            for (int j = 0; j < _count; j++) {
-                //采集x4+休息x1
-                if (j % 5 != 0) {
-                    //工作,并且奖励物品
-                    //1.先判定Probability, 2.再判定Currency是不是挖到货币或道具  3.挖到道具 再计算道具概率掉落
-                    Double _getProbability = _excelWorkPro.getProbability() / 100;
-                    log.info("_getProbability:" + _getProbability);
-                    if (NumberUtil.compare(new Random().nextDouble(), _getProbability) <= 0) {
-                        Double _currencyPro = Double.parseDouble(_excelWorkPro.getCurrency() + "") / 100;
-                        log.info("当前计算货币概率: " + _currencyPro);
-                        if (NumberUtil.compare(new Random().nextDouble(), _currencyPro) > 0) {//物品概率
-                            //随机获取一个物品,再判断物品概率是否掉落
-                            int index = (int) (Math.random() * currentExcelProps.size());
-                            ExcelProp _clientVo = currentExcelProps.get(index); //随机获得道具
-                            Double _clientPro = Double.parseDouble(_levelPropProList.get(index)) / 100;//随机获得道具对应的概率
-                            if (NumberUtil.compare(new Random().nextDouble(), _clientPro) <= 0) {
-                                //todo 如果挖了多少个,添加上去
-                                if (ArrayUtil.contains(_hasDropIds, _clientVo.getPropId().toString())) {
-                                    //已经存在的下标
-                                    int _index = ArrayUtil.indexOf(_hasDropIds, _clientVo.getPropId().toString());
-                                    int _dropCount = Integer.parseInt(ArrayUtil.get(_hasDropCounts, _index));//根据id获取记录的count
-                                    _dropCount = _dropCount + 1;
-                                    _hasDropCounts = ArrayUtil.setOrAppend(_hasDropCounts, _index, _dropCount + "");//添加1个数量
-                                    //重新设置count+1
-                                    ExcelPropClientVo _propClientVo = outExcelProps.get(_index);
-                                    _propClientVo.setItemNum(_dropCount);
-
-                                } else if (outExcelProps.size() < outTransUpperLimit) {
-                                    _hasDropIds = ArrayUtil.append(_hasDropIds, _clientVo.getPropId().toString());
-                                    _hasDropCounts = ArrayUtil.append(_hasDropCounts, "1");//新添加
-                                    outExcelProps.add(CopyUtil.copy(_clientVo, ExcelPropClientVo.class));
-                                }
-                            }
+                //  每3秒执行一次挖矿动作。根据属性数值概率,获得收益
+                //  矿工有休息动作,休息时间3秒
+                currentPropAndPros = getPropAndPros(_excelWorkPro, discoveryVo.getDiscoverLevel(), propList);
 
-                            if (!ArrayUtil.contains(_allDropIds, _clientVo.getPropId().toString())) {
-                                //如果没添加过,添加一次物品
-                                _allDropIds = ArrayUtil.append(_allDropIds, _clientVo.getPropId().toString());
-                                ExcelPropClientVo _propClientVo = CopyUtil.copy(_clientVo, ExcelPropClientVo.class);
-                                _propClientVo.setItemNum(0);
-                                allPropClientVoList.add(_propClientVo);
+                int _miningInterval = parameterVos.get(3).getValue().intValue();//挖矿时间间隔
+                log.info("挖矿间隔时间:" + _miningInterval);
+                int _count = (int) Math.floor(difSecond / _miningInterval); // 一共执行的工作次数和休息
+                log.info("执行的工作次数:" + _count);
+                //按次数执行奖励
+                //对应物品数量少于或等于运输数量
+                for (int j = 0; j < _count; j++) {
+                    //采集x4+休息x1
+                    if (j % 5 != 0) {
+                        //工作,并且奖励物品
+                        //1.先判定Probability, 2.再判定Currency是不是挖到货币或道具  3.挖到道具 再计算道具概率掉落
+                        Double _getProbability = _excelWorkPro.getProbability() / 100;
+                        double curRandom = new Random().nextDouble();
+                        log.info("curRandom:" + curRandom + ",Probability:" + _getProbability);
+                        if (NumberUtil.compare(curRandom, _getProbability) <= 0) {
+                            Double _currencyPro = Double.parseDouble(_excelWorkPro.getCurrency() + "") / 100;
+                            log.info("掉落货币概率: " + _currencyPro);
+                            ExcelPropClientVo _propClientVo;
+                            log.info("是否掉落物品:" + NumberUtil.compare(curRandom, _currencyPro));
+                            if (NumberUtil.compare(curRandom, _currencyPro) > 0) {//物品概率
+                                //获取当前抽中的物品
+                                ExcelPropAndProVo excelPropAndProVo = ProbabilityIntervalUtil.getProp(currentPropAndPros, 100);
+                                _propClientVo = CopyUtil.copy(excelPropAndProVo, ExcelPropClientVo.class);
+                                log.info("随机道具" + _propClientVo.getPropId());
+                            } 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);
                             }
-                        } else {
-                            //剩余获得货币
-                            log.info("增加货币");
-                            //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);
                         }
-
                     }
                 }
-            }
+            } else if (_professional.equals(GameEnum.PRO_WORK_PROSPECT.getValue())) {
+                //勘测地形
+                intelliChar = comCharactersVo;
 
-            //完结后三个分别增加经验
-            //收获经验 todo 处理人物升级等
-            ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(powerChar, excelCharacterLevelVo, outExp);
-            comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, powerChar.getModelId(), powerChar.getModelColor());
-            comCharactersClientVos.add(comCharactersClientVo);
-        }
-        if (intelliChar != null) {
-            //勘测地形,用于进入下层场景的职业
-            //每15秒执行一次勘探。根据属性数值概率,前往下层洞穴
-            //洞穴影响矿石类型产出,最后一层不用再计算概率
-            if (!discoveryVo.getDiscoverLevel().equals(GameEnum.LIMIT_LEVEL.getValue())) {
-                Integer _intelligence = intelliChar.getIntelligence();
-                int _explorationInterval = parameterVos.get(4).getValue().intValue();//挖矿时间间隔
-                log.info("勘探间隔时间:" + _explorationInterval);
-                int _count = (int) Math.floor(difSecond / _explorationInterval); // 一共执行勘探的次数
-                //按次数执行奖励
-                for (int j = 0; j < _count; j++) {
-                    //计算是否进入下一层的概率
-                    double _nextRatio = gotoNextSceneRatioAndList(discoveryVo.getDiscoverLevel(), _intelligence, workProList);
-                    if (NumberUtil.compare(new Random().nextDouble(), _nextRatio) <= 0) {
-                        //todo 切换关卡的奖励物品
-                        Integer _currentLevel = discoveryVo.getDiscoverLevel() + 1;
-                        discoveryVo.setDiscoverLevel(_currentLevel);
-                        super.save(discoveryVo); // 更新数据
-                        //切换场景id
-                        if (_excelWorkPro != null) { //道具和道具对应的概率
-                            String _levelProp = ArrayUtil.get(_levelItemList, _currentLevel - 1);//获取当前层级的道具
-                            String[] _mainAndProp = _levelProp.split("\\|");
-                            _levelPropIds = Arrays.asList(ArrayUtil.remove(_mainAndProp, 0)); //对应的id list
-                            String _levelSceneId = _mainAndProp[0];//第一个是场景id,移除
-                            List<String> final_levelPropIds = _levelPropIds;
-                            currentExcelProps = propList.stream().filter(e -> final_levelPropIds.contains(e.getPropId().toString())).collect(Collectors.toList());//过滤后的当前场景可获得的道具
-                        }
+                //勘测地形,用于进入下层场景的职业
+                //每15秒执行一次勘探。根据属性数值概率,前往下层洞穴
+                if (!discoveryVo.getDiscoverLevel().equals(GameEnum.LIMIT_LEVEL.getValue())) {
+                    Integer _intelligence = intelliChar.getIntelligence();
+                    int _explorationInterval = parameterVos.get(4).getValue().intValue();//挖矿时间间隔
+                    log.info("勘探间隔时间:" + _explorationInterval);
+                    int _count = (int) Math.floor(difSecond / _explorationInterval); // 一共执行勘探的次数
+                    //按次数执行奖励
+                    for (int j = 0; j < _count; j++) {
+                        //计算是否进入下一层的概率
+                        double _nextRatio = gotoNextSceneRatioAndList(discoveryVo.getDiscoverLevel(), _intelligence, workProList);
+                        if (NumberUtil.compare(new Random().nextDouble(), _nextRatio) <= 0) {
+                            //todo 切换关卡的奖励物品
+                            Integer _currentLevel = discoveryVo.getDiscoverLevel() + 1;
+                            discoveryVo.setDiscoverLevel(_currentLevel);
+                            super.save(discoveryVo); // 更新数据
+                            //切换场景id
+                            if (_excelWorkPro != null) {
+                                //道具和道具对应的概率
+                                currentPropAndPros = getPropAndPros(_excelWorkPro, _currentLevel, propList);
+                            }
 
+                        }
                     }
                 }
             }
-            //完结后三个分别增加经验
-            //收获经验 todo 处理人物升级等
-            ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(intelliChar, excelCharacterLevelVo, outExp);
-            comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, intelliChar.getModelId(), intelliChar.getModelColor());
-            comCharactersClientVos.add(comCharactersClientVo);
-        }
-        if (skillChar != null) {
-            //完结后三个分别增加经验
-            //收获经验 todo 处理人物升级等
-            ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(skillChar, excelCharacterLevelVo, outExp);
-            comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, skillChar.getModelId(), skillChar.getModelColor());
-            comCharactersClientVos.add(comCharactersClientVo);
         }
-        ComCharactersDiscoveryClientVo discoveryClientVo = CopyUtil.copy(discoveryVo, ComCharactersDiscoveryClientVo.class);
+        //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);
+        //}
+
 
-        discoveryClientVo.setSubCharacters(comCharactersClientVos);//当前职业
-        discoveryClientVo.setWorkMill(dif);//倒计时
-        //List<ExcelDropClientVo> _getDrops = outExcelDrops.subList(0, outTransUpperLimit);
         //记录一个物品获得情况
-        //List<String> _getDropIds = _getDrops.stream().map(e -> e.getId().toString()).collect(Collectors.toList());
-        String _rewardItem = String.join("|", _hasDropIds);
         String _rewardCounts = String.join("|", _hasDropCounts);
         String _allItems = String.join("|", _allDropIds);
-        discoveryVo.setRewardItem(_rewardItem);
         discoveryVo.setRewardCount(_rewardCounts);
         discoveryVo.setAllItem(_allItems);
 
         //保存挖矿数据
         //设置一次updateTime
         discoveryVo.setUpdateTime(DateUtil.date());
+        //取最开始挖的 outTransUpperLimit 数量物品
+        outExcelProps = allPropClientVoList.stream().limit(outTransUpperLimit).collect(Collectors.toList());
+
+        //当前关卡奖励的经验
+        Integer outExp = allPropClientVoList.stream().mapToInt(ExcelPropClientVo::getItemExp).sum();
+        discoveryVo.setRewardExp(outExp);
         //todo 工作完成后,isStop
         if (discoveryVo.getIsWork().equals(GameEnum.WORK_COMPLETE.getValue()) && isStop) {
-            //重置人物角色职业工作状态
-            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);
-            }
+
+            comCharactersClientVos = characters.stream().map(e -> {
+                ComCharactersVo comCharactersVo = CopyUtil.copy(e, ComCharactersVo.class);
+                ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(comCharactersVo, excelCharacterLevelVo, outExp);
+
+                //设置保存的经验
+                comCharactersVo.setExp(comCharactersClientVo.getExp());
+                comCharactersVo.setLevel(comCharactersClientVo.getLevel());
+                comCharactersVo.setProfessional(GameEnum.PRO_WORK_NORMAL.getValue());
+                comCharactersVo.setWorkPos(0);
+                comCharactersService.save(comCharactersVo);
+                comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, e.getModelId(), e.getModelColor());
+                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);
+            //}
+            //把奖励物品保存到背包
+            comPlayerBackpackService.saveAllByUserIdAndProps(discoveryVo.getUserId(), outExcelProps);
+            //删除对应的队伍
             super.delete(discoveryVo.getId());
         } else {
+            //只显示已获得的经验和添加对应的部件
+            comCharactersClientVos = characters.stream().map(e -> {
+                ComCharactersVo comCharactersVo = CopyUtil.copy(e, ComCharactersVo.class);
+                ComCharactersClientVo comCharactersClientVo = upgradeComCharactersVo(comCharactersVo, excelCharacterLevelVo, outExp);
+                comCharactersClientVo = comCharactersService.addSubResourcesClientListToVO(comCharactersClientVo, e.getModelId(), e.getModelColor());
+                return comCharactersClientVo;
+            }).collect(Collectors.toList());
             //todo 后续优化,不用每次都存储
             super.save(discoveryVo);
         }
+        ComCharactersDiscoveryClientVo discoveryClientVo = CopyUtil.copy(discoveryVo, ComCharactersDiscoveryClientVo.class);
+        discoveryClientVo.setSubCharacters(comCharactersClientVos);//当前职业
+        discoveryClientVo.setWorkMill(dif);//倒计时
         //输出限制
-        discoveryClientVo.setSubGetDrops(outExcelProps);//当前产出物品
+        discoveryClientVo.setSubGetDrops(outExcelProps);//当前收获的物品
         //全部的奖励物品
         discoveryClientVo.setSubAllDrops(allPropClientVoList);
-
         //设置携带属性
         discoveryClientVo = setDiscoveryClientVoProAndTransNum(discoveryClientVo);
         return discoveryClientVo;
     }
 
 
+    /**
+     * 挖矿当前获得的物品
+     *
+     * @param discoveryVo
+     * @return
+     */
+    @Override
+    public ComCharactersDiscoveryClientVo explorationPropsState(ComCharactersDiscoveryVo discoveryVo, Boolean isStop) {
+        return null;
+    }
+
+
     //private ComCharactersClientVo addSubResourcesClientList(ComCharactersClientVo comCharactersClientVo ,String _modelIdStr){
     //    Integer[] _modelIdArray = Convert.toIntArray(_modelIdStr.split("\\|"));
     //    //查询position
@@ -665,7 +640,6 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
         Integer final_level = _level;
         ExcelCharacterLevelVo characterLevelVo = excelCharacterLevelVo.stream().filter(e -> e.getId().equals(final_level)).findFirst().get();
 
-
         while (_exp > characterLevelVo.getExp()) {
             _exp -= characterLevelVo.getExp();
             _level += 1;//提升一级
@@ -675,8 +649,25 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
         //最后的等级和经验
         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;
+        }else{
+            cIntelligence+=randomAttr;
+        }
+        comCharactersVo.setPower(cPower);
+        comCharactersVo.setSkills(cSkill);
+        comCharactersVo.setIntelligence(cIntelligence);
         //存储一次
-        comCharactersService.save(comCharactersVo);
+        //comCharactersService.save(comCharactersVo);
         ComCharactersClientVo comCharactersClientVo = CopyUtil.copy(comCharactersVo, ComCharactersClientVo.class);
         //返回当前需要升级的经验
         comCharactersClientVo.setLevelUpExp(characterLevelVo.getExp());
@@ -926,4 +917,37 @@ public class ComCharactersDiscoveryServiceImpl extends CommonServiceImpl<ComChar
 
         return _levelId;
     }
+
+    /**
+     * 获取道具和概率数组
+     *
+     * @param _excelWorkPro
+     * @param _currentLevel
+     * @param propList
+     * @return
+     */
+    private List<ExcelPropAndProVo> getPropAndPros(ExcelWorkPro _excelWorkPro, Integer _currentLevel, List<ExcelProp> propList) {
+        //道具和道具对应的概率
+        String[] _levelItemList = _excelWorkPro.getLevelItem().split(",");
+        //获取当前层级的道具
+        String _levelProp = ArrayUtil.get(_levelItemList, _currentLevel - 1);
+        List<String> _levelPropIds = Arrays.asList(ArrayUtil.remove(_levelProp.split("\\|"), 0)); //对应的id list
+        //场景对应物品的概率
+        String[] _levelProList = _excelWorkPro.getLevelPro().split(",");
+        String _levelPropPro = ArrayUtil.get(_levelProList, _currentLevel - 1);//获取当前层级的道具对应的概率
+        List<String> _levelPropProList = Arrays.asList(ArrayUtil.remove(_levelPropPro.split("\\|"), 0)); //对应的概率id list 第一个是场景level,移除
+
+        return propList.stream().filter(e ->
+                _levelPropIds.contains(e.getPropId().toString())
+                        && !"0".equals(_levelPropProList.get(_levelPropIds.indexOf(e.getPropId().toString()))))
+                .map(e -> {
+                    ExcelPropAndProVo excelPropAndProVo = new ExcelPropAndProVo();
+                    log.info("场景:" + _currentLevel + "=>" + _levelPropProList.get(_levelPropIds.indexOf(e.getPropId().toString())));
+                    int index = _levelPropIds.indexOf(e.getPropId().toString());
+                    excelPropAndProVo = CopyUtil.copy(e, ExcelPropAndProVo.class);
+                    excelPropAndProVo.setProbability(Double.parseDouble(_levelPropProList.get(index)));
+                    return excelPropAndProVo;
+                }).collect(Collectors.toList());
+
+    }
 }

+ 50 - 0
src/main/java/com/td/Dawa/game/complayerbackpack/controller/ComPlayerBackpackController.java

@@ -0,0 +1,50 @@
+package com.td.Dawa.game.complayerbackpack.controller;
+
+import com.td.Dawa.annotation.Encrypt;
+import com.td.Dawa.common.controller.*;
+import com.td.Dawa.common.pojo.PageInfo;
+import com.td.Dawa.common.pojo.Result;
+import com.td.Dawa.config.enums.GameEnum;
+import com.td.Dawa.config.enums.ResultEnum;
+import com.td.Dawa.game.comcharacters.vo.ComCharactersVo;
+import com.td.Dawa.game.complayerbackpack.pojo.ComPlayerBackpack;
+import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackClientVo;
+import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackSimpleVo;
+import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackVo;
+import com.td.Dawa.game.complayerbackpack.service.ComPlayerBackpackService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/game/comPlayerBackpack/")
+public class ComPlayerBackpackController extends CommonController<ComPlayerBackpackVo, ComPlayerBackpack, String> {
+    @Autowired
+    private ComPlayerBackpackService comPlayerBackpackService;
+
+
+    @PostMapping("getByTag")
+    @Encrypt
+    public Result<?> getByTag(@RequestParam(value = "userId") String userId,
+                              @RequestParam(value = "tag") Integer tag,
+                              @RequestParam(value = "page",defaultValue = "1") Integer page,
+                              @RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize) {
+        try {
+            ComPlayerBackpackVo vo = new ComPlayerBackpackVo();
+            vo.setUserId(userId);
+            if(!tag.equals(0)){
+                vo.setItemTag(tag);
+            }
+            vo.setPage(page);
+            vo.setRows(pageSize);
+            vo.setSidx("desc");
+            vo.setSord("createTime");
+            PageInfo pageInfo = comPlayerBackpackService.getPageAndProp(vo);
+            return Result.of(pageInfo);
+        } catch (Exception e) {
+            return Result.of(null, false, ResultEnum.PLAYER_BACKPACK_ERROR);
+        }
+
+    }
+}

+ 33 - 0
src/main/java/com/td/Dawa/game/complayerbackpack/pojo/ComPlayerBackpack.java

@@ -0,0 +1,33 @@
+package com.td.Dawa.game.complayerbackpack.pojo;
+
+import lombok.Data;
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Entity
+@Table(name = "com_player_backpack")
+@Data
+public class ComPlayerBackpack implements Serializable {
+    @Id
+    private String id;//仓库物品id,字符串
+
+    private String userId;//用户id
+
+    private Integer itemId;//仓库物品对应id
+
+    private Integer itemType;//对应类型(0:全部,1:货币,2:矿石,3:材料)
+
+    private Integer itemTag;//标记分类
+
+    private String itemName;//物品名字
+
+    private String pictureName;//图片
+
+    private Double amount;//数量
+
+    private Date createTime;//
+
+    private Date updateTime;//
+
+}

+ 15 - 0
src/main/java/com/td/Dawa/game/complayerbackpack/repository/ComPlayerBackpackRepository.java

@@ -0,0 +1,15 @@
+package com.td.Dawa.game.complayerbackpack.repository;
+
+import com.td.Dawa.common.repository.*;
+import com.td.Dawa.game.complayerbackpack.pojo.ComPlayerBackpack;
+import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackVo;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface ComPlayerBackpackRepository extends CommonRepository<ComPlayerBackpack, String> {
+
+    List<ComPlayerBackpack> findAllByItemIdInAndUserId(List<Integer> itemId,String userId);
+}

+ 18 - 0
src/main/java/com/td/Dawa/game/complayerbackpack/service/ComPlayerBackpackService.java

@@ -0,0 +1,18 @@
+package com.td.Dawa.game.complayerbackpack.service;
+
+import com.td.Dawa.common.pojo.PageInfo;
+import com.td.Dawa.common.service.*;
+import com.td.Dawa.game.complayerbackpack.pojo.ComPlayerBackpack;
+import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackClientVo;
+import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackSimpleVo;
+import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackVo;
+import com.td.Dawa.game.excelprop.vo.ExcelPropClientVo;
+
+import java.util.List;
+
+public interface ComPlayerBackpackService extends CommonService<ComPlayerBackpackVo, ComPlayerBackpack, String> {
+
+    List<ComPlayerBackpack> saveAllByUserIdAndProps(String userId, List<ExcelPropClientVo> propClientVoList);
+
+    PageInfo getPageAndProp(ComPlayerBackpackVo comPlayerBackpackVo);
+}

+ 106 - 0
src/main/java/com/td/Dawa/game/complayerbackpack/service/ComPlayerBackpackServiceImpl.java

@@ -0,0 +1,106 @@
+package com.td.Dawa.game.complayerbackpack.service;
+
+import cn.hutool.core.util.ArrayUtil;
+import com.td.Dawa.common.pojo.PageCondition;
+import com.td.Dawa.common.pojo.PageInfo;
+import com.td.Dawa.common.service.*;
+import com.td.Dawa.config.enums.GameEnum;
+import com.td.Dawa.game.complayerbackpack.pojo.ComPlayerBackpack;
+import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackClientVo;
+import com.td.Dawa.game.complayerbackpack.vo.ComPlayerBackpackVo;
+import com.td.Dawa.game.complayerbackpack.repository.ComPlayerBackpackRepository;
+import com.td.Dawa.game.excelprop.pojo.ExcelProp;
+import com.td.Dawa.game.excelprop.service.ExcelPropService;
+import com.td.Dawa.game.excelprop.vo.ExcelPropClientVo;
+import com.td.Dawa.game.excelprop.vo.ExcelPropVo;
+import com.td.Dawa.util.CopyUtil;
+import com.td.Dawa.util.UUIDUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+@Transactional
+@Slf4j
+public class ComPlayerBackpackServiceImpl extends CommonServiceImpl<ComPlayerBackpackVo, ComPlayerBackpack, String> implements ComPlayerBackpackService {
+
+    @PersistenceContext
+    private EntityManager em;
+    @Autowired
+    private ComPlayerBackpackRepository comPlayerBackpackRepository;
+    @Autowired
+    private ExcelPropService excelPropService;
+
+    /**
+     * 根据userId对应的propIds保存全部物品
+     *
+     * @param propClientVoList
+     * @param userId
+     * @return
+     */
+    @Override
+    public List<ComPlayerBackpack> saveAllByUserIdAndProps(String userId, List<ExcelPropClientVo> propClientVoList) {
+        //todo 如果传入的数据背包有一部分没有,则新增
+        List<Integer> propIds = propClientVoList.stream().map(e -> e.getPropId()).collect(Collectors.toList());
+        List<ComPlayerBackpack> comPlayerBackpackList = comPlayerBackpackRepository.findAllByItemIdInAndUserId(propIds, userId);
+        List<Integer> itemArray = comPlayerBackpackList.stream().map(e -> e.getItemId()).collect(Collectors.toList());
+        //propIds 为原始prop id
+        for (ExcelPropClientVo vo : propClientVoList) {
+            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());
+                super.save(CopyUtil.copy(comPlayerBackpack, ComPlayerBackpackVo.class));
+            } else {
+                //如果不存在,新增
+                ComPlayerBackpack comPlayerBackpack = new ComPlayerBackpack();
+                //comPlayerBackpack.setId(UUIDUtil.getUUID());
+                comPlayerBackpack.setAmount(1d);
+                comPlayerBackpack.setItemId(vo.getPropId());
+                comPlayerBackpack.setUserId(userId);
+                comPlayerBackpack.setItemName(vo.getName());
+                comPlayerBackpack.setItemTag(vo.getItemType());
+                comPlayerBackpack.setItemType(vo.getItemType());//分类和标识暂时设置一样
+                comPlayerBackpack.setCreateTime(vo.getCreateTime());
+                comPlayerBackpackList.add(comPlayerBackpack);
+                super.save(CopyUtil.copy(comPlayerBackpack, ComPlayerBackpackVo.class));
+            }
+        }
+        //comPlayerBackpackRepository.saveAll(comPlayerBackpackList);
+        return comPlayerBackpackList;
+    }
+
+
+    @Override
+    public PageInfo getPageAndProp(ComPlayerBackpackVo comPlayerBackpackVo) {
+
+        if (!(comPlayerBackpackVo instanceof PageCondition)) {
+            throw new RuntimeException("ComPlayerBackpackVo 未继承PageCondition。");
+        }
+        List<ExcelProp> excelPropVoList = excelPropService.getListFromCache(GameEnum.REDIS_KEY_EXCEL_PROP.getMessage());
+        List<Integer> propIdList = excelPropVoList.stream().map(ExcelProp::getPropId).collect(Collectors.toList());
+
+        PageCondition pageCondition = (PageCondition) comPlayerBackpackVo;
+        Page<ComPlayerBackpack> page = comPlayerBackpackRepository.findAll(Example.of(CopyUtil.copy(comPlayerBackpackVo, ComPlayerBackpack.class)), pageCondition.getPageable());
+
+        List<ComPlayerBackpackClientVo> comPlayerBackpackClientVos = page.getContent().stream().map(e -> {
+            ComPlayerBackpackClientVo comPlayerBackpackClientVo = CopyUtil.copy(e, ComPlayerBackpackClientVo.class);
+            comPlayerBackpackClientVo.setPropInfo(CopyUtil.copy(excelPropVoList.get(propIdList.indexOf(e.getItemId())), ExcelPropClientVo.class));
+            return comPlayerBackpackClientVo;
+        }).collect(Collectors.toList());
+
+        return  PageInfo.customContent(page, comPlayerBackpackClientVos);
+    }
+}

+ 33 - 0
src/main/java/com/td/Dawa/game/complayerbackpack/vo/ComPlayerBackpackClientVo.java

@@ -0,0 +1,33 @@
+package com.td.Dawa.game.complayerbackpack.vo;
+
+import com.td.Dawa.game.excelprop.vo.ExcelPropClientVo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class ComPlayerBackpackClientVo implements Serializable {
+    private String id;//仓库物品id,字符串
+
+    //private String userId;//用户id
+
+    //private Integer itemId;//仓库物品对应id
+
+    private ExcelPropClientVo propInfo;// 道具物品
+
+    private Integer itemType;//对应类型(0:全部,1:货币,2:矿石,3:材料)
+
+    private Integer itemTag;//标记分类
+
+    private String itemName;//物品名字
+
+    private String pictureName;//图片
+
+    private Double amount;//数量
+
+    private Date createTime;//
+
+    private Date updateTime;//
+
+}

+ 29 - 0
src/main/java/com/td/Dawa/game/complayerbackpack/vo/ComPlayerBackpackSimpleVo.java

@@ -0,0 +1,29 @@
+package com.td.Dawa.game.complayerbackpack.vo;
+
+import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class ComPlayerBackpackSimpleVo implements Serializable {
+    private String id;//仓库物品id,字符串
+
+    private String userId;//用户id
+
+    private Integer itemId;//仓库物品对应id
+
+    private Integer itemType;//对应类型(0:全部,1:货币,2:矿石,3:材料)
+
+    private Integer itemTag;//标记分类
+
+    private String itemName;//物品名字
+
+    private String pictureName;//图片
+
+    private Double amount;//数量
+
+    private Date createTime;//
+
+    private Date updateTime;//
+
+}

+ 29 - 0
src/main/java/com/td/Dawa/game/complayerbackpack/vo/ComPlayerBackpackVo.java

@@ -0,0 +1,29 @@
+package com.td.Dawa.game.complayerbackpack.vo;
+
+import com.td.Dawa. common.pojo.PageCondition;import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class ComPlayerBackpackVo extends PageCondition implements Serializable {
+    private String id;//仓库物品id,字符串
+
+    private String userId;//用户id
+
+    private Integer itemId;//仓库物品对应id
+
+    private Integer itemType;//对应类型(0:全部,1:货币,2:矿石,3:材料)
+
+    private Integer itemTag;//标记分类
+
+    private String itemName;//物品名字
+
+    private String pictureName;//图片
+
+    private Double amount;//数量
+
+    private Date createTime;//
+
+    private Date updateTime;//
+
+}

+ 3 - 1
src/main/java/com/td/Dawa/game/excelcharacterlevel/pojo/ExcelCharacterLevel.java

@@ -21,7 +21,9 @@ public class ExcelCharacterLevel implements Serializable {
 
     private Integer skill;//技巧
 
-    private Integer wisdom;//智慧
+    private Integer intelligence;//智力
+
+    private Integer randomAttr;//属性分配点
 
     private String note;//备注
 

+ 3 - 1
src/main/java/com/td/Dawa/game/excelcharacterlevel/vo/ExcelCharacterLevelSimpleVo.java

@@ -16,7 +16,9 @@ public class ExcelCharacterLevelSimpleVo implements Serializable {
 
     private Integer skill;//技巧
 
-    private Integer wisdom;//智慧
+    private Integer intelligence;//智力
+
+    private Integer randomAttr;//属性分配点
 
     private String note;//备注
 

+ 3 - 1
src/main/java/com/td/Dawa/game/excelcharacterlevel/vo/ExcelCharacterLevelVo.java

@@ -16,7 +16,9 @@ public class ExcelCharacterLevelVo extends PageCondition implements Serializable
 
     private Integer skill;//技巧
 
-    private Integer wisdom;//智慧
+    private Integer intelligence;//智力
+
+    private Integer randomAttr;//属性分配点
 
     private String note;//备注
 

+ 2 - 0
src/main/java/com/td/Dawa/game/excelprop/pojo/ExcelProp.java

@@ -19,6 +19,8 @@ public class ExcelProp implements Serializable {
 
     private Integer itemLevel;//等级
 
+    private Integer itemExp;//物品经验
+
     private String name;//名称
 
     private Integer icon;//图标

+ 47 - 0
src/main/java/com/td/Dawa/game/excelprop/vo/ExcelPropAndProVo.java

@@ -0,0 +1,47 @@
+package com.td.Dawa.game.excelprop.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class ExcelPropAndProVo implements Serializable {
+
+    private Integer id;//
+
+    private Integer propId;//物品id
+
+    private Integer itemType;//物品类型
+
+    private Integer itemLevel;//等级
+
+    private Integer itemExp;//物品经验
+
+    private String name;//名称
+
+    private Integer icon;//图标
+
+    private Integer model;//模型
+
+    private String tips;//描述
+
+    private Integer effect;//默认为初始值空,没效果
+
+    private Integer employ;//是否可使用(0不可用,1可用)
+
+    private Integer result;//使用效果
+
+    private Integer overlap;//堆叠上限
+
+    private Integer itemNum;//计数
+
+    private String note;//备注
+
+    private Date createTime;//
+
+    private Date updateTime;//
+
+    private Double Probability;//当前道具的概率
+
+}

+ 3 - 1
src/main/java/com/td/Dawa/game/excelprop/vo/ExcelPropClientVo.java

@@ -15,6 +15,8 @@ public class ExcelPropClientVo implements Serializable {
 
     private Integer itemLevel;//等级
 
+    private Integer itemExp;//物品经验
+
     private String name;//名称
 
     private Integer icon;//图标
@@ -35,7 +37,7 @@ public class ExcelPropClientVo implements Serializable {
 
     private String note;//备注
 
-    //private Date createTime;//
+    private Date createTime;//
 
     //private Date updateTime;//
 

+ 2 - 0
src/main/java/com/td/Dawa/game/excelprop/vo/ExcelPropSimpleVo.java

@@ -15,6 +15,8 @@ public class ExcelPropSimpleVo implements Serializable {
 
     private Integer itemLevel;//等级
 
+    private Integer itemExp;//物品经验
+
     private String name;//名称
 
     private Integer icon;//图标

+ 2 - 0
src/main/java/com/td/Dawa/game/excelprop/vo/ExcelPropVo.java

@@ -14,6 +14,8 @@ public class ExcelPropVo extends PageCondition implements Serializable {
 
     private Integer itemLevel;//等级
 
+    private Integer itemExp;//物品经验
+
     private String name;//名称
 
     private Integer icon;//图标

+ 2 - 2
src/main/java/com/td/Dawa/game/excelresources/pojo/ExcelResources.java

@@ -15,11 +15,11 @@ public class ExcelResources implements Serializable {
 
     private Integer artId;//art编号
 
-    private String artType;//美术资源种类(1:场景,2:动作,3:特效,4:图标)
+    private Integer artType;//美术资源种类(1:场景,2:动作,3:特效,4:图标)
 
     private String artName;//美术资源名
 
-    private String artActionFrame;//帧数
+    private Integer artActionFrame;//帧数
 
     private String artLocal;//资源位置
 

+ 2 - 2
src/main/java/com/td/Dawa/game/excelresources/vo/ExcelResourcesClientVo.java

@@ -13,11 +13,11 @@ public class ExcelResourcesClientVo implements Serializable {
 
     private Integer artId;//art编号
 
-    private String artType;//美术资源种类(1:场景,2:动作,3:特效,4:图标)
+    private Integer artType;//美术资源种类(1:场景,2:动作,3:特效,4:图标)
 
     private String artName;//美术资源名
 
-    private String artActionFrame;//帧数
+    private Integer artActionFrame;//帧数
 
     private String artLocal;//资源位置
 

+ 2 - 2
src/main/java/com/td/Dawa/game/excelresources/vo/ExcelResourcesSimpleVo.java

@@ -10,11 +10,11 @@ public class ExcelResourcesSimpleVo implements Serializable {
 
     private Integer artId;//art编号
 
-    private String artType;//美术资源种类(1:场景,2:动作,3:特效,4:图标)
+    private Integer artType;//美术资源种类(1:场景,2:动作,3:特效,4:图标)
 
     private String artName;//美术资源名
 
-    private String artActionFrame;//帧数
+    private Integer artActionFrame;//帧数
 
     private String artLocal;//资源位置
 

+ 2 - 2
src/main/java/com/td/Dawa/game/excelresources/vo/ExcelResourcesVo.java

@@ -10,11 +10,11 @@ public class ExcelResourcesVo extends PageCondition implements Serializable {
 
     private Integer artId;//art编号
 
-    private String artType;//美术资源种类(1:场景,2:动作,3:特效,4:图标)
+    private Integer artType;//美术资源种类(1:场景,2:动作,3:特效,4:图标)
 
     private String artName;//美术资源名
 
-    private String artActionFrame;//帧数
+    private Integer artActionFrame;//帧数
 
     private String artLocal;//资源位置
 

+ 2 - 1
src/main/java/com/td/Dawa/util/ExcelDataUtil.java

@@ -31,7 +31,8 @@ public class ExcelDataUtil {
                 .addHeaderAlias("升级","exp")
                 .addHeaderAlias("力量","power")
                 .addHeaderAlias("技巧","skill")
-                .addHeaderAlias("智慧","wisdom")
+                .addHeaderAlias("智力","intelligence")
+                .addHeaderAlias("属性分配点","randomAttr")
                 .addHeaderAlias("备注","note");
         return excelReader.read(1,3,ExcelCharacterLevelVo.class);
     }

+ 95 - 0
src/main/java/com/td/Dawa/util/ProbabilityIntervalUtil.java

@@ -0,0 +1,95 @@
+package com.td.Dawa.util;
+
+import com.td.Dawa.game.excelcharactercreate.pojo.ExcelCharacterCreate;
+import com.td.Dawa.game.excelcharactercreate.vo.ExcelCharacterCreateClientVo;
+import com.td.Dawa.game.excelprop.vo.ExcelPropAndProVo;
+import org.apache.poi.ss.formula.functions.T;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 概率计算工具类
+ */
+public class ProbabilityIntervalUtil {
+
+    /**
+     * ExcelPropAndProVo 抽中的道具
+     *
+     * @param list 列表
+     * @param unit 单位
+     * @return
+     */
+    public static ExcelPropAndProVo getProp(List<ExcelPropAndProVo> list, Integer unit) {
+        if (list.isEmpty()) {
+            throw new RuntimeException("list is empty!");
+        }
+        //奖品总数
+        int size = list.size();
+
+        //计算总概率
+        double sumProbability = 0d;
+        for (ExcelPropAndProVo e : list) {
+            sumProbability += e.getProbability();
+        }
+
+        //计算每个奖品的概率区间
+        //例如奖品A概率区间0-0.1 奖品B概率区间 0.1-0.5 奖品C概率区间0.5-1
+        //每个奖品的中奖率越大,所占的概率区间就越大
+        List<Double> sortAwardProbabilityList = new ArrayList<Double>(size);
+        Double tempSumProbability = 0d;
+        for (ExcelPropAndProVo e : list) {
+            tempSumProbability += e.getProbability();
+            sortAwardProbabilityList.add(tempSumProbability / sumProbability);
+        }
+
+        //产生0-1之间的随机数
+        //随机数在哪个概率区间内,则是哪个奖品
+        double randomDouble = Math.random();
+        //加入到概率区间中,排序后,返回的下标则是awardList中中奖的下标
+        sortAwardProbabilityList.add(randomDouble);
+        Collections.sort(sortAwardProbabilityList);
+        int lotteryIndex = sortAwardProbabilityList.indexOf(randomDouble);
+        return list.get(lotteryIndex);
+    }
+
+
+    /**
+     * ExcelPropAndProVo 生成模型时候权重计算
+     *
+     * @param list 列表
+     * @return
+     */
+    public static ExcelCharacterCreate getRolePos(List<ExcelCharacterCreate> list) {
+        if (list.isEmpty()) {
+            throw new RuntimeException("list is empty!");
+        }
+        //奖品总数
+        int size = list.size();
+
+        //计算总概率
+        double sumProbability = 0d;
+        for (ExcelCharacterCreate e : list) {
+            sumProbability += Double.parseDouble(e.getWeight());
+        }
+
+        //计算每个奖品的概率区间
+        //例如奖品A概率区间0-0.1 奖品B概率区间 0.1-0.5 奖品C概率区间0.5-1
+        //每个奖品的中奖率越大,所占的概率区间就越大
+        List<Double> sortAwardProbabilityList = new ArrayList<Double>(size);
+        Double tempSumProbability = 0d;
+        for (ExcelCharacterCreate e : list) {
+            tempSumProbability += Double.parseDouble(e.getWeight());
+            sortAwardProbabilityList.add(tempSumProbability / sumProbability);
+        }
+
+        //产生0-1之间的随机数
+        //随机数在哪个概率区间内,则是哪个奖品
+        double randomDouble = Math.random();
+        //加入到概率区间中,排序后,返回的下标则是awardList中中奖的下标
+        sortAwardProbabilityList.add(randomDouble);
+        Collections.sort(sortAwardProbabilityList);
+        int lotteryIndex = sortAwardProbabilityList.indexOf(randomDouble);
+        return list.get(lotteryIndex);
+    }
+}

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

@@ -44,7 +44,8 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
             , {field: 'exp', title: '升级经验'}
             , {field: 'power', title: '力量'}
             , {field: 'skill', title: '技巧'}
-            , {field: 'wisdom', title: '智慧'}
+            , {field: 'intelligence', title: '智力'}
+            , {field: 'randomAttr', title: '属性分配点'}
             , {field: 'note', title: '备注', hide: true}
             , {field: 'createTime', title: '创建时间', hide: true}
             , {field: 'updateTime', title: '更新时间', hide: true}

+ 9 - 7
src/main/resources/static/sys/aComConfig/js/excelProp.js

@@ -43,6 +43,7 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
             , {field: 'propId', title: '物品id'}
             , {field: 'itemType', title: '物品类型'}
             , {field: 'itemLevel', title: '等级'}
+            , {field: 'itemExp', title: '采集经验'}
             , {field: 'name', title: '名称'}
             , {field: 'icon', title: '图标'}
             , {field: 'model', title: '模型'}
@@ -51,7 +52,7 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
             , {field: 'note', title: '备注', hide: true}
             , {field: 'createTime', title: '创建时间', hide: true}
             , {field: 'updateTime', title: '更新时间', hide: true}
-            , {fixed: 'right', title: '操作', toolbar: '#configTableBarDemo'}
+            , {fixed: 'right', title: '操作', width: 140, toolbar: '#configTableBarDemo'}
         ]]
         , defaultToolbar: ['', 'exports', 'print']
         , page: true
@@ -60,9 +61,9 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
     });
 
     //工具栏事件
-    table.on('toolbar(test)', function(obj){
+    table.on('toolbar(test)', function (obj) {
         let data = obj.data;
-        switch(obj.event){
+        switch (obj.event) {
             case 'addNewRow':
                 $("#tableId").css("display", "none");
                 $("#tableTime").css("display", "none");
@@ -71,7 +72,8 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
                 $("#configForm")[0].reset();
                 form.render();
                 break;
-        };
+        }
+        ;
     });
     //监听行工具事件
     table.on('tool(test)', function (obj) {
@@ -83,9 +85,9 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
             $("#addBtn").css("display", "none");
             $("#configForm").form(data);
             form.render();
-        }else if(obj.event === 'del'){
-            layer.confirm('真的删除行么?', function(index){
-                $.post(ctx + "/sys/sysExcel/deleteExcelProp", {id:data.id}, function (data) {
+        } else if (obj.event === 'del') {
+            layer.confirm('真的删除行么?', function (index) {
+                $.post(ctx + "/sys/sysExcel/deleteExcelProp", {id: data.id}, function (data) {
                     if (!data.flag) {
                         layer.msg(data.msg, {icon: 2, time: 2000}, function () {
                         });

+ 10 - 9
src/main/resources/view/sys/aComConfig/excelCharacterLevel.html

@@ -36,13 +36,6 @@
             <div class="layui-card-header">操作表单</div>
             <div class="layui-card-body">
                 <form id="configForm" class="layui-form layui-form-pane">
-                    <div class="layui-form-item">
-                        <label class="layui-form-label">level(ID)</label>
-                        <div class="layui-input-block">
-                            <input type="text" name="id" autocomplete="off" placeholder="id"
-                                   class="layui-input" >
-                        </div>
-                    </div>
                     <div class="layui-form-item">
                         <label class="layui-form-label">角色种类</label>
                         <div class="layui-input-block">
@@ -75,9 +68,17 @@
                     </div>
 
                     <div class="layui-form-item" id="animalId">
-                        <label class="layui-form-label">智慧</label>
+                        <label class="layui-form-label">智力</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="intelligence" autocomplete="off" placeholder="intelligence"
+                                   class="layui-input" >
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item" id="animalId">
+                        <label class="layui-form-label">属性分配点</label>
                         <div class="layui-input-block">
-                            <input type="text" name="wisdom" autocomplete="off" placeholder="wisdom"
+                            <input type="text" name="randomAttr" autocomplete="off" placeholder="randomAttr"
                                    class="layui-input" >
                         </div>
                     </div>

+ 16 - 8
src/main/resources/view/sys/aComConfig/excelProp.html

@@ -36,18 +36,19 @@
             <div class="layui-card-header">操作表单</div>
             <div class="layui-card-body">
                 <form id="configForm" class="layui-form layui-form-pane">
-                    <div class="layui-form-item">
-                        <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">-->
+                    <!--        &lt;!&ndash;readonly = "readonly"&ndash;&gt;-->
+                    <!--        <input type="text" name="id" autocomplete="off" placeholder="id"-->
+                    <!--               class="layui-input" >-->
+                    <!--    </div>-->
+                    <!--</div>-->
                     <div class="layui-form-item">
                         <label class="layui-form-label">物品id</label>
                         <div class="layui-input-block">
                             <input type="text" name="propId" autocomplete="off" placeholder="propId"
-                                   class="layui-input" readonly = "readonly">
+                                   class="layui-input" >
                         </div>
                     </div>
                     <div class="layui-form-item">
@@ -64,6 +65,13 @@
                                    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="itemExp" autocomplete="off" placeholder="itemExp"
+                                   class="layui-input">
+                        </div>
+                    </div>
                     <div class="layui-form-item" >
                         <label class="layui-form-label">名称</label>
                         <div class="layui-input-block">