Переглянути джерело

Merge remote-tracking branch 'origin/master'

zhangbin 1 рік тому
батько
коміт
398aa9152b
31 змінених файлів з 2394 додано та 112 видалено
  1. 100 0
      nbjk-admin/src/main/java/com/miaxis/app/controller/birthday/BirthdayLogController.java
  2. 47 3
      nbjk-admin/src/main/java/com/miaxis/app/controller/wx/WxController.java
  3. 9 0
      nbjk-admin/src/main/java/com/miaxis/app/controller/wx/WxNotifyController.java
  4. 1 0
      nbjk-admin/src/main/resources/application-dev.yml
  5. 1 0
      nbjk-admin/src/main/resources/application-local.yml
  6. 56 0
      nbjk-admin/src/test/java/com/miaxis/test/Test3.java
  7. 31 0
      nbjk-admin/src/test/java/com/miaxis/test/WxFenZhangTest.java
  8. 1326 0
      nbjk-common/src/main/java/com/miaxis/common/config/ShiShenConfig.java
  9. 8 11
      nbjk-common/src/main/java/com/miaxis/common/config/WxPayAppConfigImpl.java
  10. 91 0
      nbjk-common/src/main/java/com/miaxis/common/config/WxPayXcxConfigImpl.java
  11. 2 5
      nbjk-common/src/main/java/com/miaxis/common/core/domain/model/LoginUser.java
  12. 62 0
      nbjk-service/src/main/java/com/miaxis/birthday/domain/BirthdayLog.java
  13. 62 0
      nbjk-service/src/main/java/com/miaxis/birthday/dto/BirthdayLogDto.java
  14. 29 0
      nbjk-service/src/main/java/com/miaxis/birthday/mapper/BirthdayLogMapper.java
  15. 24 0
      nbjk-service/src/main/java/com/miaxis/birthday/service/IBirthdayLogService.java
  16. 59 0
      nbjk-service/src/main/java/com/miaxis/birthday/service/impl/BirthdayLogServiceImpl.java
  17. 13 1
      nbjk-service/src/main/java/com/miaxis/order/domain/OrderInfo.java
  18. 57 0
      nbjk-service/src/main/java/com/miaxis/order/domain/OrderSplit.java
  19. 22 0
      nbjk-service/src/main/java/com/miaxis/order/mapper/OrderSplitMapper.java
  20. 21 0
      nbjk-service/src/main/java/com/miaxis/order/service/IOrderSplitService.java
  21. 12 0
      nbjk-service/src/main/java/com/miaxis/order/service/impl/OrderInfoServiceImpl.java
  22. 36 0
      nbjk-service/src/main/java/com/miaxis/order/service/impl/OrderSplitServiceImpl.java
  23. 7 0
      nbjk-service/src/main/java/com/miaxis/wx/domain/WxOrder.java
  24. 1 1
      nbjk-service/src/main/java/com/miaxis/wx/dto/WxOrderDTO.java
  25. 20 0
      nbjk-service/src/main/java/com/miaxis/wx/dto/WxOrderProfitDTO.java
  26. 5 0
      nbjk-service/src/main/java/com/miaxis/wx/mapper/WxOrderMapper.java
  27. 8 3
      nbjk-service/src/main/java/com/miaxis/wx/service/IWxOrderService.java
  28. 152 27
      nbjk-service/src/main/java/com/miaxis/wx/service/impl/WxOrderServiceImpl.java
  29. 55 0
      nbjk-service/src/main/resources/mapper/birthday/BirthdayLogMapper.xml
  30. 2 1
      nbjk-service/src/main/resources/mapper/order/OrderInfoMapper.xml
  31. 75 60
      nbjk-service/src/main/resources/mapper/wx/WxOrderMapper.xml

+ 100 - 0
nbjk-admin/src/main/java/com/miaxis/app/controller/birthday/BirthdayLogController.java

@@ -0,0 +1,100 @@
+package com.miaxis.app.controller.birthday;
+
+import com.miaxis.birthday.domain.BirthdayLog;
+import com.miaxis.birthday.service.IBirthdayLogService;
+import com.miaxis.common.constant.Constants;
+import com.miaxis.common.core.controller.BaseController;
+import com.miaxis.common.core.domain.Response;
+import com.miaxis.common.core.page.ResponsePageInfo;
+import com.miaxis.common.utils.SecurityUtils;
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 【查询记录】Controller
+ *
+ * @author miaxis
+ * @date 2023-12-11
+ */
+@RestController
+@RequestMapping(Constants.STUDENT_PREFIX + "/birthday/log")
+@Api(tags = {"【app-8字查询记录】"})
+public class BirthdayLogController extends BaseController {
+    @Autowired
+    private IBirthdayLogService birthdayLogService;
+
+    /**
+     * 查询查询记录列表
+     */
+    @GetMapping("/list")
+    @ApiOperation("查询查询记录列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", value = "当前页码", dataType = "int", paramType = "query", required = false),
+            @ApiImplicitParam(name = "pageSize", value = "每页数据量", dataType = "int", paramType = "query", required = false),
+    })
+    public ResponsePageInfo<BirthdayLog> list(@ModelAttribute BirthdayLog birthdayLog) {
+        startPage();
+        birthdayLog.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
+        List<BirthdayLog> list = birthdayLogService.selectBirthdayLogList(birthdayLog);
+        return toResponsePageInfo(list);
+    }
+
+    /**
+     * 获取查询记录详细信息
+     */
+    @GetMapping(value = "/{id}")
+    @ApiOperation("获取查询记录详细信息")
+    public Response<BirthdayLog> getInfo(
+            @ApiParam(name = "id", value = "查询记录参数", required = true)
+            @PathVariable("id") Long id
+    ) {
+        return Response.success(birthdayLogService.getById(id));
+    }
+
+    /**
+     * 新增查询记录
+
+     @PostMapping
+     @ApiOperation("新增查询记录") public Response<Integer> add(@RequestBody BirthdayLog birthdayLog){
+     return toResponse(birthdayLogService.save(birthdayLog) ? 1 : 0);
+     }
+     */
+
+    /**
+     * 新增查询记录
+     */
+    @PostMapping
+    @ApiOperation("新增查询记录")
+    public Response<BirthdayLog> add(@RequestBody BirthdayLog birthdayLog) {
+        Long userId = SecurityUtils.getLoginUser().getStudent().getId();
+        birthdayLog.setUserId(userId);
+        BirthdayLog birthdayLogDb = birthdayLogService.saveBirthdayLog(birthdayLog);
+        return Response.success(birthdayLogDb);
+    }
+
+
+    /**
+     * 修改查询记录
+     */
+    @PutMapping
+    @ApiOperation("修改查询记录")
+    public Response<Integer> edit(@RequestBody BirthdayLog birthdayLog) {
+        return toResponse(birthdayLogService.updateById(birthdayLog) ? 1 : 0);
+    }
+
+    /**
+     * 删除查询记录
+     */
+    @DeleteMapping("/{ids}")
+    @ApiOperation("删除查询记录")
+    public Response<Integer> remove(
+            @ApiParam(name = "ids", value = "查询记录ids参数", required = true)
+            @PathVariable Long[] ids
+    ) {
+        return toResponse(birthdayLogService.removeByIds(Arrays.asList(ids)) ? 1 : 0);
+    }
+}

+ 47 - 3
nbjk-admin/src/main/java/com/miaxis/app/controller/wx/WxController.java

@@ -3,6 +3,8 @@ package com.miaxis.app.controller.wx;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.miaxis.birthday.domain.BirthdayLog;
+import com.miaxis.birthday.service.IBirthdayLogService;
 import com.miaxis.common.config.WxpayConfig;
 import com.miaxis.common.constant.Constants;
 import com.miaxis.common.core.controller.BaseController;
@@ -16,6 +18,7 @@ import com.miaxis.common.utils.ip.IpUtils;
 import com.miaxis.common.utils.uuid.CommonUtils;
 import com.miaxis.exam.domain.ExamInfo;
 import com.miaxis.exam.service.IExamInfoService;
+import com.miaxis.system.service.ISysConfigService;
 import com.miaxis.system.service.ISysDictDataService;
 import com.miaxis.vip.service.IVipUserExamService;
 import com.miaxis.wx.domain.WxOrder;
@@ -73,9 +76,17 @@ public class WxController extends BaseController {
     @Autowired
     private ISysDictDataService dictDataService;
 
+    @Autowired
+    private ISysConfigService configService;
+
+
     @Autowired
     private IExamInfoService examInfoService;
 
+    @Autowired
+    private IBirthdayLogService birthdayLogService;
+
+
     @Autowired
     private IVipUserExamService vipUserExamService;
 
@@ -231,9 +242,9 @@ public class WxController extends BaseController {
      */
     @PostMapping(value = "/xcxPrepareOrder")
     @ApiOperation("微信小程序支付下单")
-    public Response<JSONObject> xcxPrepareOrder(@RequestBody WxOrderDTO wxOrderDTO) throws Exception{
+    public Response<JSONObject> xcxPrepareOrder(@RequestBody WxOrderDTO wxOrderDTO) throws Exception {
         UserInfo userInfo = SecurityUtils.getLoginUser().getStudent();
-        if(wxOrderDTO.getGoodsType()==1) {
+        if (wxOrderDTO.getGoodsType() == 1) {
             int count = vipUserExamService.getUserExamByUnionIdAndGoodsId(userInfo.getUnionId(), wxOrderDTO.getGoodsId());
             if (count > 0) {
                 throw new CustomException("您已购买过该考场,退回上个页面,重新进入。");
@@ -253,12 +264,42 @@ public class WxController extends BaseController {
             order.setUnionId(userInfo.getUnionId());
             order.setPhoneType(wxOrderDTO.getPhoneType()); //手机类型 1:苹果 2:安卓
             order.setForeType(wxOrderDTO.getForeType()); //前端类型 1:app 2:小程序 3:公众号
+            if(wxOrderDTO.getForeType()==2) {
+                order.setProfitSharing(1); //待分账
+            }
             order.setTotal(examInfo.getPrice());
             order.setOrderStatus(OrderStatusEnum.PROCESSING.getCode());
             wxOrderService.save(order);
             return Response.success(placeXcxWxOrder(order, examInfo.getName()));
-        } else if (wxOrderDTO.getGoodsType()==2) {
+        } else if (wxOrderDTO.getGoodsType() == 2) {
             throw new CustomException("请正确传入GoodsType,GoodsType=2未开发");
+        } else if (wxOrderDTO.getGoodsType() == 3) {
+            String baziPriceStr = configService.selectConfigByKey("bazi_price");
+            BirthdayLog birthdayLog = birthdayLogService.getById(wxOrderDTO.getGoodsId()); //记录ID
+            if(birthdayLog!=null && (birthdayLog.getIsPay()==1 || birthdayLog.getIsPay()==2)) {
+                throw new CustomException("您已支付此订单,退回上个页面,重新进入。");
+            }
+            //创建本地微信订单
+            WxOrder order = new WxOrder();
+            String orderCode = getOrderCode(userInfo.getId());
+            order.setGoodsId(birthdayLog.getId()); //八字记录ID
+            order.setGoodsName("八字排盘");
+            order.setGoodsType(3);
+            order.setOutTradeNo(orderCode);
+            order.setUserId(userInfo.getId());
+            order.setXcxOpenid(userInfo.getXcxOpenid());
+            order.setAppOpenid(userInfo.getAppOpenid());
+            order.setGzhOpenid(userInfo.getGzhOpenid());
+            order.setUnionId(userInfo.getUnionId());
+            order.setPhoneType(wxOrderDTO.getPhoneType()); //手机类型 1:苹果 2:安卓
+            order.setForeType(wxOrderDTO.getForeType()); //前端类型 1:app 2:小程序 3:公众号
+            order.setTotal(Integer.parseInt(baziPriceStr));
+            if(wxOrderDTO.getForeType()==2) {
+                order.setProfitSharing(1); //待分账
+            }
+            order.setOrderStatus(OrderStatusEnum.PROCESSING.getCode());
+            wxOrderService.save(order);
+            return Response.success(placeXcxWxOrder(order, "八字排盘"));
         } else {
             throw new CustomException("请正确传入GoodsType。");
         }
@@ -284,6 +325,9 @@ public class WxController extends BaseController {
                 .put("out_trade_no", order.getOutTradeNo());
         rootNode.putObject("amount").put("total", order.getTotal());
         rootNode.putObject("payer").put("openid", order.getXcxOpenid());
+        if("八字排盘".equals(goodsName)) {
+            rootNode.putObject("settle_info").put("profit_sharing", true);
+        }
         objectMapper.writeValue(bos, rootNode);
         httpPost.setEntity(new StringEntity(rootNode.toString(), "utf-8"));
         HttpResponse response = httpClient.execute(httpPost);

+ 9 - 0
nbjk-admin/src/main/java/com/miaxis/app/controller/wx/WxNotifyController.java

@@ -59,6 +59,7 @@ public class WxNotifyController {
     @Autowired
     private IOrderInfoService orderInfoService;
 
+
     /**
      * 微信支付回调接口
      */
@@ -208,6 +209,14 @@ public class WxNotifyController {
         wxOrder.setOrderStatus("2");
 
         orderInfoService.writeVipDataToDb(wxOrder,payType);
+
+        try {
+            wxOrderService.wxAddFenZhang();  //添加分账用户
+            wxOrderService.wxProfitsharing(wxOrder);  //进行分账
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
         wxOrderService.updateById(wxOrder);
 
     }

+ 1 - 0
nbjk-admin/src/main/resources/application-dev.yml

@@ -118,6 +118,7 @@ gzh3:
 
 # 小程序
 xcx:
+    mchId: 1639487489
     appId: wx97bbc22daac9362a
     appSecret: e67435002c220ef2f69a1b43508c61ec
 

+ 1 - 0
nbjk-admin/src/main/resources/application-local.yml

@@ -119,6 +119,7 @@ gzh3:
 
 # 小程序
 xcx:
+    mchId: 1639487489
     appId: wx97bbc22daac9362a
     appSecret: e67435002c220ef2f69a1b43508c61ec
 

+ 56 - 0
nbjk-admin/src/test/java/com/miaxis/test/Test3.java

@@ -0,0 +1,56 @@
+package com.miaxis.test;
+
+import com.miaxis.NbjkApplication;
+import com.miaxis.dict.service.IDictCityService;
+import com.miaxis.wx.domain.WxOrder;
+import com.miaxis.wx.service.IWxOrderService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+@ActiveProfiles("dev")
+@SpringBootTest(classes = NbjkApplication.class)
+@RunWith(SpringRunner.class)
+public class Test3 {
+
+
+    @Autowired
+    private IWxOrderService wxOrderService;
+
+
+
+    @Test
+    public void test() throws Exception {
+    //    WxOrder wxOrder = wxOrderService.getById(892);
+
+        List<WxOrder> wxOrderList = wxOrderService.selectWxOrderByWaitProfit();
+
+        for (int i = 0; i < wxOrderList.size(); i++) {
+            WxOrder wxOrder = wxOrderList.get(i);
+            boolean flag = wxOrderService.wxProfitsharing(wxOrderList.get(i));
+
+            if(flag) {
+                wxOrder.setProfitSharing(3);
+                wxOrderService.saveOrUpdate(wxOrder);
+            } else {
+                wxOrder.setProfitSharing(2);
+                wxOrderService.saveOrUpdate(wxOrder);
+            }
+
+        }
+
+
+
+
+
+
+    }
+
+
+
+}

+ 31 - 0
nbjk-admin/src/test/java/com/miaxis/test/WxFenZhangTest.java

@@ -0,0 +1,31 @@
+package com.miaxis.test;
+
+import com.miaxis.NbjkApplication;
+import com.miaxis.wx.service.IWxGzhService;
+import com.miaxis.wx.service.IWxOrderService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@SpringBootTest(classes = NbjkApplication.class)
+@RunWith(SpringRunner.class)
+public class WxFenZhangTest {
+
+    @Autowired
+    private IWxGzhService wxGzhService;
+    @Autowired
+    private IWxOrderService wxOrderService;
+
+    @Test
+    public void test1() throws Exception {
+
+        wxOrderService.wxAddFenZhang();
+
+    }
+
+
+
+}
+

+ 1326 - 0
nbjk-common/src/main/java/com/miaxis/common/config/ShiShenConfig.java

@@ -0,0 +1,1326 @@
+package com.miaxis.common.config;
+
+
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+@Data
+@Component
+public class ShiShenConfig {
+
+    //天干地支颜色
+    private final Map<String, String> ganZhiColor = new TreeMap<String, String>();
+    //天干地支五行
+    private final Map<String, String> ganZhiFive = new TreeMap<String, String>();
+    //正印
+    private final Map<String, String> zhengYin = new TreeMap<String, String>();
+    //食神
+    private final Map<String, String> shiShen = new TreeMap<String, String>();
+    //正官
+    private final Map<String, String> zhengGuan = new TreeMap<String, String>();
+    //正财
+    private final Map<String, String> zhengCai = new TreeMap<String, String>();
+    //七杀
+    private final Map<String, String> qiSha = new TreeMap<String, String>();
+    //偏印
+    private final Map<String, String> pianYin = new TreeMap<String, String>();
+    //伤官
+    private final Map<String, String> shangGuan = new TreeMap<String, String>();
+    //劫财
+    private final Map<String, String> jieCai = new TreeMap<String, String>();
+    //比肩
+    private final Map<String, String> biJian = new TreeMap<String, String>();
+    //偏财
+    private final Map<String, String> pianCai = new TreeMap<String, String>();
+
+    //身强喜用十神
+    private final List<String> xiYongShiShenQ = new ArrayList<String>();
+    //身弱喜用十神
+    private final List<String> xiYongShiShenR = new ArrayList<String>();
+
+    //身强忌凶十神
+    private final List<String> jiXiongShiShenQ = new ArrayList<String>();
+    //身弱忌凶十神
+    private final List<String> jiXiongShiShenR = new ArrayList<String>();
+
+
+    //藏干 本气
+    private final Map<String, String> benQi = new TreeMap<String, String>();
+    //藏干 中气
+    private final Map<String, String> zhongQi = new TreeMap<String, String>();
+    //藏干 余气
+    private final Map<String, String> yuQi = new TreeMap<String, String>();
+
+    //空亡
+    private final Map<String, String> kongWang = new TreeMap<String, String>();
+
+    //纳音
+    private final Map<String, String> naYin = new TreeMap<String, String>();
+
+    //喜用
+    private final Map<String, List> xiYong = new TreeMap<String, List>();
+
+    //喜用的数字
+    private final Map<String, List> xiNumber = new TreeMap<String, List>();
+
+    //数字文案
+    private final Map<String, String> numberWenAn = new TreeMap<String, String>();
+
+    //五行与身体部位
+    private final Map<String, List> fiveBuWei = new TreeMap<String, List>();
+
+    //燥湿平衡
+    private final Map<String, String> zaoShi = new TreeMap<String, String>();
+
+    //大运六十甲子
+    private final List<String> liushijiazi = new ArrayList<String>();
+
+    //天干阴阳关系
+    private final Map<String, String> tianGanYY = new TreeMap<String, String>();
+
+    //八字身体位置坐标
+    private final Map<Integer, String> body = new TreeMap<Integer, String>();
+
+    //八字方位位置坐标
+    private final Map<Integer, String> position = new TreeMap<Integer, String>();
+
+    //十神缺失
+    private final Map<String, String> zeroShiShen = new TreeMap<String, String>();
+
+    //五行缺失
+    private final Map<String, String> zeroFive = new TreeMap<String, String>();
+
+    //五行与行业
+    private final Map<String, String> fiveIndustry = new TreeMap<String, String>();
+
+    //十神与行业
+    private final Map<String, String> shiShenIndustry = new TreeMap<String, String>();
+
+    //天乙贵人
+    private final Map<String, String> tianyiGuiren = new TreeMap<String, String>();
+
+    //天乙贵人 生肖
+    private final Map<String, String> tianyiGuirenShengXiao = new TreeMap<String, String>();
+
+    //袁天罡骨算命
+    private final Map<String, Integer> guZhong = new TreeMap<String, Integer>();
+
+    //袁天罡骨算命评语(男)
+    private final Map<String, String> guZhongPingYuMan = new TreeMap<String, String>();
+
+    //袁天罡骨算命评语(女)
+    private final Map<String, String> guZhongPingYuWoman = new TreeMap<String, String>();
+
+    //脾气
+    private final Map<String, String> piQi = new TreeMap<String, String>();
+
+    //五鬼运财
+    private final Map<String, String> wuGui = new TreeMap<String, String>();
+
+    //五鬼运财 生肖
+    private final Map<String, String> wuGuiShengXiao = new TreeMap<String, String>();
+
+    //容易出桃花的八字
+    private final List<String> taoHuaZi = new ArrayList<String>();
+
+
+    @PostConstruct
+    public void init() {
+
+        //天干地支颜色
+        ganZhiColor.put("甲", "绿");
+        ganZhiColor.put("乙", "绿");
+        ganZhiColor.put("丙", "红");
+        ganZhiColor.put("丁", "红");
+        ganZhiColor.put("戊", "棕");
+        ganZhiColor.put("己", "棕");
+        ganZhiColor.put("庚", "橙");
+        ganZhiColor.put("辛", "橙");
+        ganZhiColor.put("壬", "蓝");
+        ganZhiColor.put("癸", "蓝");
+
+        ganZhiColor.put("子", "蓝");
+        ganZhiColor.put("丑", "棕");
+        ganZhiColor.put("寅", "绿");
+        ganZhiColor.put("卯", "绿");
+        ganZhiColor.put("辰", "棕");
+        ganZhiColor.put("巳", "红");
+        ganZhiColor.put("午", "红");
+        ganZhiColor.put("未", "棕");
+        ganZhiColor.put("申", "橙");
+        ganZhiColor.put("酉", "橙");
+        ganZhiColor.put("戌", "棕");
+        ganZhiColor.put("亥", "蓝");
+
+        //天干地支五行
+        ganZhiFive.put("甲", "木");
+        ganZhiFive.put("乙", "木");
+        ganZhiFive.put("丙", "火");
+        ganZhiFive.put("丁", "火");
+        ganZhiFive.put("戊", "土");
+        ganZhiFive.put("己", "土");
+        ganZhiFive.put("庚", "金");
+        ganZhiFive.put("辛", "金");
+        ganZhiFive.put("壬", "水");
+        ganZhiFive.put("癸", "水");
+
+        ganZhiFive.put("子", "水");
+        ganZhiFive.put("丑", "土");
+        ganZhiFive.put("寅", "木");
+        ganZhiFive.put("卯", "木");
+        ganZhiFive.put("辰", "土");
+        ganZhiFive.put("巳", "火");
+        ganZhiFive.put("午", "火");
+        ganZhiFive.put("未", "土");
+        ganZhiFive.put("申", "金");
+        ganZhiFive.put("酉", "金");
+        ganZhiFive.put("戌", "土");
+        ganZhiFive.put("亥", "水");
+
+        //正印
+        zhengYin.put("癸", "甲");
+        zhengYin.put("壬", "乙");
+        zhengYin.put("乙", "丙");
+        zhengYin.put("甲", "丁");
+        zhengYin.put("丁", "戊");
+        zhengYin.put("丙", "己");
+        zhengYin.put("己", "庚");
+        zhengYin.put("戊", "辛");
+        zhengYin.put("辛", "壬");
+        zhengYin.put("庚", "癸");
+
+        //食神
+        shiShen.put("丙", "甲");
+        shiShen.put("丁", "乙");
+        shiShen.put("戊", "丙");
+        shiShen.put("己", "丁");
+        shiShen.put("庚", "戊");
+        shiShen.put("辛", "己");
+        shiShen.put("壬", "庚");
+        shiShen.put("癸", "辛");
+        shiShen.put("甲", "壬");
+        shiShen.put("乙", "癸");
+
+        //正官
+        zhengGuan.put("辛", "甲");
+        zhengGuan.put("庚", "乙");
+        zhengGuan.put("癸", "丙");
+        zhengGuan.put("壬", "丁");
+        zhengGuan.put("乙", "戊");
+        zhengGuan.put("甲", "己");
+        zhengGuan.put("丁", "庚");
+        zhengGuan.put("丙", "辛");
+        zhengGuan.put("己", "壬");
+        zhengGuan.put("戊", "癸");
+
+        //正财
+        zhengCai.put("己", "甲");
+        zhengCai.put("戊", "乙");
+        zhengCai.put("辛", "丙");
+        zhengCai.put("庚", "丁");
+        zhengCai.put("癸", "戊");
+        zhengCai.put("壬", "己");
+        zhengCai.put("乙", "庚");
+        zhengCai.put("甲", "辛");
+        zhengCai.put("丁", "壬");
+        zhengCai.put("丙", "癸");
+
+
+        //七杀
+        qiSha.put("庚", "甲");
+        qiSha.put("辛", "乙");
+        qiSha.put("壬", "丙");
+        qiSha.put("癸", "丁");
+        qiSha.put("甲", "戊");
+        qiSha.put("乙", "己");
+        qiSha.put("丙", "庚");
+        qiSha.put("丁", "辛");
+        qiSha.put("戊", "壬");
+        qiSha.put("己", "癸");
+
+        //偏印
+        pianYin.put("壬", "甲");
+        pianYin.put("癸", "乙");
+        pianYin.put("甲", "丙");
+        pianYin.put("乙", "丁");
+        pianYin.put("丙", "戊");
+        pianYin.put("丁", "己");
+        pianYin.put("戊", "庚");
+        pianYin.put("己", "辛");
+        pianYin.put("庚", "壬");
+        pianYin.put("辛", "癸");
+
+        //伤官
+        shangGuan.put("丁", "甲");
+        shangGuan.put("丙", "乙");
+        shangGuan.put("己", "丙");
+        shangGuan.put("戊", "丁");
+        shangGuan.put("辛", "戊");
+        shangGuan.put("庚", "己");
+        shangGuan.put("癸", "庚");
+        shangGuan.put("壬", "辛");
+        shangGuan.put("乙", "壬");
+        shangGuan.put("甲", "癸");
+
+        //劫财
+        jieCai.put("乙", "甲");
+        jieCai.put("甲", "乙");
+        jieCai.put("丁", "丙");
+        jieCai.put("丙", "丁");
+        jieCai.put("己", "戊");
+        jieCai.put("戊", "己");
+        jieCai.put("辛", "庚");
+        jieCai.put("庚", "辛");
+        jieCai.put("癸", "壬");
+        jieCai.put("壬", "癸");
+
+        //比肩
+        biJian.put("甲", "甲");
+        biJian.put("乙", "乙");
+        biJian.put("丙", "丙");
+        biJian.put("丁", "丁");
+        biJian.put("戊", "戊");
+        biJian.put("己", "己");
+        biJian.put("庚", "庚");
+        biJian.put("辛", "辛");
+        biJian.put("壬", "壬");
+        biJian.put("癸", "癸");
+
+
+        //偏财
+        pianCai.put("戊", "甲");
+        pianCai.put("己", "乙");
+        pianCai.put("庚", "丙");
+        pianCai.put("辛", "丁");
+        pianCai.put("壬", "戊");
+        pianCai.put("癸", "己");
+        pianCai.put("甲", "庚");
+        pianCai.put("乙", "辛");
+        pianCai.put("丙", "壬");
+        pianCai.put("丁", "癸");
+
+
+        //本气
+        benQi.put("子", "癸");
+        benQi.put("丑", "己");
+        benQi.put("寅", "甲");
+        benQi.put("卯", "乙");
+        benQi.put("辰", "戊");
+        benQi.put("巳", "丙");
+        benQi.put("午", "丁");
+        benQi.put("未", "己");
+        benQi.put("申", "庚");
+        benQi.put("酉", "辛");
+        benQi.put("戌", "戊");
+        benQi.put("亥", "壬");
+
+        //中气
+        zhongQi.put("丑", "辛");
+        zhongQi.put("寅", "丙");
+        zhongQi.put("辰", "乙");
+        zhongQi.put("巳", "戊");
+        zhongQi.put("午", "己");
+        zhongQi.put("未", "丁");
+        zhongQi.put("申", "壬");
+        zhongQi.put("戌", "辛");
+        zhongQi.put("亥", "甲");
+
+        //余气
+        yuQi.put("丑", "癸");
+        yuQi.put("寅", "戊");
+        yuQi.put("辰", "癸");
+        yuQi.put("巳", "庚");
+        yuQi.put("未", "乙");
+        yuQi.put("申", "戊");
+        yuQi.put("戌", "丁");
+
+
+        //空亡
+        //1甲子旬
+        kongWang.put("甲子", "戌亥");
+        kongWang.put("乙丑", "戌亥");
+        kongWang.put("丙寅", "戌亥");
+        kongWang.put("丁卯", "戌亥");
+        kongWang.put("戊辰", "戌亥");
+        kongWang.put("己巳", "戌亥");
+        kongWang.put("庚午", "戌亥");
+        kongWang.put("辛未", "戌亥");
+        kongWang.put("壬申", "戌亥");
+        kongWang.put("癸酉", "戌亥");
+
+        //2甲戌旬
+        kongWang.put("甲戌", "申酉");
+        kongWang.put("乙亥", "申酉");
+        kongWang.put("丙子", "申酉");
+        kongWang.put("丁丑", "申酉");
+        kongWang.put("戊寅", "申酉");
+        kongWang.put("己卯", "申酉");
+        kongWang.put("庚辰", "申酉");
+        kongWang.put("辛巳", "申酉");
+        kongWang.put("壬午", "申酉");
+        kongWang.put("癸未", "申酉");
+
+        //3甲申旬
+        kongWang.put("甲申", "午未");
+        kongWang.put("乙酉", "午未");
+        kongWang.put("丙戌", "午未");
+        kongWang.put("丁亥", "午未");
+        kongWang.put("戊子", "午未");
+        kongWang.put("己丑", "午未");
+        kongWang.put("庚寅", "午未");
+        kongWang.put("辛卯", "午未");
+        kongWang.put("壬辰", "午未");
+        kongWang.put("癸巳", "午未");
+
+
+        //4甲午旬
+        kongWang.put("甲午", "辰巳");
+        kongWang.put("乙未", "辰巳");
+        kongWang.put("丙申", "辰巳");
+        kongWang.put("丁酉", "辰巳");
+        kongWang.put("戊戌", "辰巳");
+        kongWang.put("己亥", "辰巳");
+        kongWang.put("庚子", "辰巳");
+        kongWang.put("辛丑", "辰巳");
+        kongWang.put("壬寅", "辰巳");
+        kongWang.put("癸卯", "辰巳");
+
+
+        //5甲辰旬
+        kongWang.put("甲辰", "寅卯");
+        kongWang.put("乙巳", "寅卯");
+        kongWang.put("丙午", "寅卯");
+        kongWang.put("丁未", "寅卯");
+        kongWang.put("戊申", "寅卯");
+        kongWang.put("己酉", "寅卯");
+        kongWang.put("庚戌", "寅卯");
+        kongWang.put("辛亥", "寅卯");
+        kongWang.put("壬子", "寅卯");
+        kongWang.put("癸丑", "寅卯");
+
+        //6甲寅旬
+        kongWang.put("甲寅", "子丑");
+        kongWang.put("乙卯", "子丑");
+        kongWang.put("丙辰", "子丑");
+        kongWang.put("丁巳", "子丑");
+        kongWang.put("戊午", "子丑");
+        kongWang.put("己未", "子丑");
+        kongWang.put("庚申", "子丑");
+        kongWang.put("辛酉", "子丑");
+        kongWang.put("壬戌", "子丑");
+        kongWang.put("癸亥", "子丑");
+
+
+        //纳音
+        naYin.put("甲子", "海中金");
+        naYin.put("乙丑", "海中金");
+        naYin.put("丙寅", "炉中火");
+        naYin.put("丁卯", "炉中火");
+        naYin.put("戊辰", "大林木");
+        naYin.put("己巳", "大林木");
+        naYin.put("庚午", "路旁土");
+        naYin.put("辛未", "路帝土");
+        naYin.put("壬申", "剑锋金");
+        naYin.put("癸酉", "剑锋金");
+
+        naYin.put("甲戌", "山头火");
+        naYin.put("乙亥", "山头火");
+        naYin.put("丙子", "洞下水");
+        naYin.put("丁丑", "洞下水");
+        naYin.put("戊寅", "城墙土");
+        naYin.put("己卯", "城墙土");
+        naYin.put("庚辰", "白腊金");
+        naYin.put("辛巳", "白腊金");
+        naYin.put("壬午", "杨柳木");
+        naYin.put("癸未", "杨柳木");
+
+        naYin.put("甲申", "泉中水");
+        naYin.put("乙酉", "泉中水");
+        naYin.put("丙戌", "屋上土");
+        naYin.put("丁亥", "屋上土");
+        naYin.put("戊子", "霹雷火");
+        naYin.put("己丑", "霹雷火");
+        naYin.put("庚寅", "松柏木");
+        naYin.put("辛卯", "松柏木");
+        naYin.put("壬辰", "常流水");
+        naYin.put("癸巳", "常流水");
+
+        naYin.put("甲午", "沙中金");
+        naYin.put("乙未", "沙中金");
+        naYin.put("丙申", "山下火");
+        naYin.put("丁酉", "山下火");
+        naYin.put("戊戌", "平地木");
+        naYin.put("己亥", "平地木");
+        naYin.put("庚子", "壁上土");
+        naYin.put("辛丑", "壁上土");
+        naYin.put("壬寅", "金箔金");
+        naYin.put("癸卯", "金箔金");
+
+        naYin.put("甲辰", "佛灯火");
+        naYin.put("乙巳", "佛灯火");
+        naYin.put("丙午", "天河水");
+        naYin.put("丁未", "天河水");
+        naYin.put("戊申", "大驿土");
+        naYin.put("己酉", "大驿土");
+        naYin.put("庚戌", "钗钏金");
+        naYin.put("辛亥", "钗钏金");
+        naYin.put("壬子", "桑松木");
+        naYin.put("癸丑", "桑松木");
+
+        naYin.put("甲寅", "大溪水");
+        naYin.put("乙卯", "大溪水");
+        naYin.put("丙辰", "沙中土");
+        naYin.put("丁巳", "沙中土");
+        naYin.put("戊午", "天上火");
+        naYin.put("己未", "天上火");
+        naYin.put("庚申", "石榴木");
+        naYin.put("辛酉", "石榴木");
+        naYin.put("壬戌", "大海水");
+        naYin.put("癸亥", "大海水");
+
+        //一1旬
+        liushijiazi.add("甲子");
+        liushijiazi.add("乙丑");
+        liushijiazi.add("丙寅");
+        liushijiazi.add("丁卯");
+        liushijiazi.add("戊辰");
+        liushijiazi.add("己巳");
+        liushijiazi.add("庚午");
+        liushijiazi.add("辛未");
+        liushijiazi.add("壬申");
+        liushijiazi.add("癸酉");
+        //一2旬
+        liushijiazi.add("甲戌");
+        liushijiazi.add("乙亥");
+        liushijiazi.add("丙子");
+        liushijiazi.add("丁丑");
+        liushijiazi.add("戊寅");
+        liushijiazi.add("己卯");
+        liushijiazi.add("庚辰");
+        liushijiazi.add("辛巳");
+        liushijiazi.add("壬午");
+        liushijiazi.add("癸未");
+        //一3旬
+        liushijiazi.add("甲申");
+        liushijiazi.add("乙酉");
+        liushijiazi.add("丙戌");
+        liushijiazi.add("丁亥");
+        liushijiazi.add("戊子");
+        liushijiazi.add("己丑");
+        liushijiazi.add("庚寅");
+        liushijiazi.add("辛卯");
+        liushijiazi.add("壬辰");
+        liushijiazi.add("癸巳");
+        //一4旬
+        liushijiazi.add("甲午");
+        liushijiazi.add("乙未");
+        liushijiazi.add("丙申");
+        liushijiazi.add("丁酉");
+        liushijiazi.add("戊戌");
+        liushijiazi.add("己亥");
+        liushijiazi.add("庚子");
+        liushijiazi.add("辛丑");
+        liushijiazi.add("壬寅");
+        liushijiazi.add("癸卯");
+        //一5旬
+        liushijiazi.add("甲辰");
+        liushijiazi.add("乙巳");
+        liushijiazi.add("丙午");
+        liushijiazi.add("丁未");
+        liushijiazi.add("戊申");
+        liushijiazi.add("己酉");
+        liushijiazi.add("庚戌");
+        liushijiazi.add("辛亥");
+        liushijiazi.add("壬子");
+        liushijiazi.add("癸丑");
+        //一6旬
+        liushijiazi.add("甲寅");
+        liushijiazi.add("乙卯");
+        liushijiazi.add("丙辰");
+        liushijiazi.add("丁巳");
+        liushijiazi.add("戊午");
+        liushijiazi.add("己未");
+        liushijiazi.add("庚申");
+        liushijiazi.add("辛酉");
+        liushijiazi.add("壬戌");
+        liushijiazi.add("癸亥");
+        //二1旬
+        liushijiazi.add("甲子");
+        liushijiazi.add("乙丑");
+        liushijiazi.add("丙寅");
+        liushijiazi.add("丁卯");
+        liushijiazi.add("戊辰");
+        liushijiazi.add("己巳");
+        liushijiazi.add("庚午");
+        liushijiazi.add("辛未");
+        liushijiazi.add("壬申");
+        liushijiazi.add("癸酉");
+        //二2旬
+        liushijiazi.add("甲戌");
+        liushijiazi.add("乙亥");
+        liushijiazi.add("丙子");
+        liushijiazi.add("丁丑");
+        liushijiazi.add("戊寅");
+        liushijiazi.add("己卯");
+        liushijiazi.add("庚辰");
+        liushijiazi.add("辛巳");
+        liushijiazi.add("壬午");
+        liushijiazi.add("癸未");
+        //二3旬
+        liushijiazi.add("甲申");
+        liushijiazi.add("乙酉");
+        liushijiazi.add("丙戌");
+        liushijiazi.add("丁亥");
+        liushijiazi.add("戊子");
+        liushijiazi.add("己丑");
+        liushijiazi.add("庚寅");
+        liushijiazi.add("辛卯");
+        liushijiazi.add("壬辰");
+        liushijiazi.add("癸巳");
+        //二4旬
+        liushijiazi.add("甲午");
+        liushijiazi.add("乙未");
+        liushijiazi.add("丙申");
+        liushijiazi.add("丁酉");
+        liushijiazi.add("戊戌");
+        liushijiazi.add("己亥");
+        liushijiazi.add("庚子");
+        liushijiazi.add("辛丑");
+        liushijiazi.add("壬寅");
+        liushijiazi.add("癸卯");
+        //二5旬
+        liushijiazi.add("甲辰");
+        liushijiazi.add("乙巳");
+        liushijiazi.add("丙午");
+        liushijiazi.add("丁未");
+        liushijiazi.add("戊申");
+        liushijiazi.add("己酉");
+        liushijiazi.add("庚戌");
+        liushijiazi.add("辛亥");
+        liushijiazi.add("壬子");
+        liushijiazi.add("癸丑");
+        //二6旬
+        liushijiazi.add("甲寅");
+        liushijiazi.add("乙卯");
+        liushijiazi.add("丙辰");
+        liushijiazi.add("丁巳");
+        liushijiazi.add("戊午");
+        liushijiazi.add("己未");
+        liushijiazi.add("庚申");
+        liushijiazi.add("辛酉");
+        liushijiazi.add("壬戌");
+        liushijiazi.add("癸亥");
+        //三1旬
+        liushijiazi.add("甲子");
+        liushijiazi.add("乙丑");
+        liushijiazi.add("丙寅");
+        liushijiazi.add("丁卯");
+        liushijiazi.add("戊辰");
+        liushijiazi.add("己巳");
+        liushijiazi.add("庚午");
+        liushijiazi.add("辛未");
+        liushijiazi.add("壬申");
+        liushijiazi.add("癸酉");
+        //三2旬
+        liushijiazi.add("甲戌");
+        liushijiazi.add("乙亥");
+        liushijiazi.add("丙子");
+        liushijiazi.add("丁丑");
+        liushijiazi.add("戊寅");
+        liushijiazi.add("己卯");
+        liushijiazi.add("庚辰");
+        liushijiazi.add("辛巳");
+        liushijiazi.add("壬午");
+        liushijiazi.add("癸未");
+        //三3旬
+        liushijiazi.add("甲申");
+        liushijiazi.add("乙酉");
+        liushijiazi.add("丙戌");
+        liushijiazi.add("丁亥");
+        liushijiazi.add("戊子");
+        liushijiazi.add("己丑");
+        liushijiazi.add("庚寅");
+        liushijiazi.add("辛卯");
+        liushijiazi.add("壬辰");
+        liushijiazi.add("癸巳");
+        //三4旬
+        liushijiazi.add("甲午");
+        liushijiazi.add("乙未");
+        liushijiazi.add("丙申");
+        liushijiazi.add("丁酉");
+        liushijiazi.add("戊戌");
+        liushijiazi.add("己亥");
+        liushijiazi.add("庚子");
+        liushijiazi.add("辛丑");
+        liushijiazi.add("壬寅");
+        liushijiazi.add("癸卯");
+        //三5旬
+        liushijiazi.add("甲辰");
+        liushijiazi.add("乙巳");
+        liushijiazi.add("丙午");
+        liushijiazi.add("丁未");
+        liushijiazi.add("戊申");
+        liushijiazi.add("己酉");
+        liushijiazi.add("庚戌");
+        liushijiazi.add("辛亥");
+        liushijiazi.add("壬子");
+        liushijiazi.add("癸丑");
+        //三6旬
+        liushijiazi.add("甲寅");
+        liushijiazi.add("乙卯");
+        liushijiazi.add("丙辰");
+        liushijiazi.add("丁巳");
+        liushijiazi.add("戊午");
+        liushijiazi.add("己未");
+        liushijiazi.add("庚申");
+        liushijiazi.add("辛酉");
+        liushijiazi.add("壬戌");
+        liushijiazi.add("癸亥");
+
+
+        //天干阴阳
+        tianGanYY.put("甲", "阳");
+        tianGanYY.put("乙", "阴");
+        tianGanYY.put("丙", "阳");
+        tianGanYY.put("丁", "阴");
+        tianGanYY.put("戊", "阳");
+        tianGanYY.put("己", "阴");
+        tianGanYY.put("庚", "阳");
+        tianGanYY.put("辛", "阴");
+        tianGanYY.put("壬", "阳");
+        tianGanYY.put("癸", "阴");
+
+
+        //喜用
+        List<String> muQ = new ArrayList<String>();
+        muQ.add("火");
+        muQ.add("土");
+        xiYong.put("木强", muQ);
+
+        List<String> muR = new ArrayList<String>();
+        muR.add("木");
+        muR.add("水");
+        xiYong.put("木弱", muR);
+
+        List<String> huoQ = new ArrayList<String>();
+        huoQ.add("土");
+        huoQ.add("金");
+        xiYong.put("火强", huoQ);
+
+        List<String> huoR = new ArrayList<String>();
+        huoR.add("火");
+        huoR.add("木");
+        xiYong.put("火弱", huoR);
+
+        List<String> tuQ = new ArrayList<String>();
+        tuQ.add("金");
+        tuQ.add("水");
+        xiYong.put("土强", tuQ);
+
+        List<String> tuR = new ArrayList<String>();
+        tuR.add("土");
+        tuR.add("火");
+        xiYong.put("土弱", tuR);
+
+        List<String> jinQ = new ArrayList<String>();
+        jinQ.add("水");
+        jinQ.add("木");
+        xiYong.put("金强", jinQ);
+
+        List<String> jinR = new ArrayList<String>();
+        jinR.add("金");
+        jinR.add("土");
+        xiYong.put("金弱", jinR);
+
+        List<String> shuiQ = new ArrayList<String>();
+        shuiQ.add("木");
+        shuiQ.add("火");
+        xiYong.put("水强", shuiQ);
+
+        List<String> shuiR = new ArrayList<String>();
+        shuiR.add("水");
+        shuiR.add("金");
+        xiYong.put("水弱", shuiR);
+
+        //喜用的号码
+        List<String> numberShui = new ArrayList<String>();
+        numberShui.add("1");
+        numberShui.add("6");
+        xiNumber.put("水", numberShui);
+
+        List<String> numberHuo = new ArrayList<String>();
+        numberHuo.add("2");
+        numberHuo.add("7");
+        xiNumber.put("火", numberHuo);
+
+        List<String> numberMu = new ArrayList<String>();
+        numberMu.add("3");
+        numberMu.add("8");
+        xiNumber.put("木", numberMu);
+
+        List<String> numberJin = new ArrayList<String>();
+        numberJin.add("4");
+        numberJin.add("9");
+        xiNumber.put("金", numberJin);
+
+        List<String> numberTu = new ArrayList<String>();
+        numberTu.add("5");
+        numberTu.add("0");
+        xiNumber.put("土", numberTu);
+
+        // 身强喜用神
+        xiYongShiShenQ.add("食神");
+        xiYongShiShenQ.add("伤官");
+        xiYongShiShenQ.add("正财");
+        xiYongShiShenQ.add("偏财");
+        xiYongShiShenQ.add("七杀");
+        xiYongShiShenQ.add("正官");
+        // 身弱喜用神
+        xiYongShiShenR.add("比肩");
+        xiYongShiShenR.add("劫财");
+        xiYongShiShenR.add("正印");
+        xiYongShiShenR.add("偏印");
+        //身强忌凶
+        jiXiongShiShenQ.add("比肩");
+        jiXiongShiShenQ.add("劫财");
+        jiXiongShiShenQ.add("正印");
+        jiXiongShiShenQ.add("偏印");
+        //身弱忌凶
+        jiXiongShiShenR.add("食神");
+        jiXiongShiShenR.add("伤官");
+        jiXiongShiShenR.add("正财");
+        jiXiongShiShenR.add("偏财");
+        jiXiongShiShenR.add("七杀");
+        jiXiongShiShenR.add("正官");
+
+
+        //五行对应身体部位
+        List<String> shuiBuWei = new ArrayList<String>();
+        shuiBuWei.add("肾");
+        shuiBuWei.add("膀胱");
+        fiveBuWei.put("水", shuiBuWei);
+
+        List<String> huoBuWei = new ArrayList<String>();
+        huoBuWei.add("小肠");
+        huoBuWei.add("心脏");
+        fiveBuWei.put("火", huoBuWei);
+
+        List<String> muBuWei = new ArrayList<String>();
+        muBuWei.add("肝");
+        muBuWei.add("胆");
+        fiveBuWei.put("木", muBuWei);
+
+        List<String> jinBuWei = new ArrayList<String>();
+        jinBuWei.add("大肠");
+        jinBuWei.add("肺");
+        fiveBuWei.put("金", jinBuWei);
+
+        List<String> tuBuWei = new ArrayList<String>();
+        tuBuWei.add("脾");
+        tuBuWei.add("胃");
+        fiveBuWei.put("土", tuBuWei);
+
+
+        //燥湿平衡
+        zaoShi.put("辰", "水");
+        zaoShi.put("丑", "水");
+        zaoShi.put("未", "火");
+        zaoShi.put("戌", "火");
+
+
+        //身体位置坐标
+        body.put(0, "头部");
+        body.put(1, "脖子");
+        body.put(2, "胸部");
+        body.put(3, "腹部");
+        body.put(4, "小腹");
+        body.put(5, "屁股");
+        body.put(6, "大腿");
+        body.put(7, "小腿-脚部");
+
+
+        //方位位置坐标
+        position.put(0, "东南方");
+        position.put(1, "东北方");
+        position.put(2, "南方");
+        position.put(3, "北方");
+        position.put(4, "南方");
+        position.put(5, "北方");
+        position.put(6, "西南方");
+        position.put(7, "西北方");
+
+        //缺失十神的性格
+        zeroShiShen.put("正印", "缺少正印,记忆力不太好");
+        zeroShiShen.put("食神", "缺少食神,口才不好,不会放松与吃喝玩乐");
+        zeroShiShen.put("正官", "缺少正官,管不住自己,不好当领导");
+        zeroShiShen.put("正财", "缺少正财,收入不稳定");
+        zeroShiShen.put("七杀", "缺少七杀,执行力差,拖延症");
+        zeroShiShen.put("偏印", "缺少偏印,分析能力较差");
+        zeroShiShen.put("偏财", "缺少偏财,比较吝啬");
+        zeroShiShen.put("伤官", "缺少伤官,上进心不强");
+        zeroShiShen.put("劫财", "缺少劫财,不会利用人,总被人利用");
+        zeroShiShen.put("比肩", "缺少比肩,朋友少,性格孤僻,有点社交恐惧症");
+
+        //缺失五行补法
+        zeroFive.put("木", "五行缺木:在家中摆放一些绿色植物,如绿萝、仙人掌等,增加木元素;选择一些绿色的装饰品,如青翠的窗帘、地毯等。");
+        zeroFive.put("火", "五行缺火:使用明亮的灯光,尤其是红色或橙色的灯具,有助于增加火元素;点燃一些香气怡人的蜡烛,既能提升室内氛围,又有助于补充火元素。");
+        zeroFive.put("土", "五行缺土:选择一些土黄、咖啡色的装饰品,如地毯、靠垫等;在家中使用一些陶瓷餐具或装饰品,有助于增加土元素。");
+        zeroFive.put("金", "五行缺金:放置一些金属质地的装饰品,如金色的花瓶、金属相框等;引入一些金属家具,如金属椅子、桌子等。");
+        zeroFive.put("水", "五行缺水:在家中挂一些水景画,如瀑布、湖泊等,能够引入水元素;摆放一些水晶饰品,如水晶灯、水晶摆件等,有助于补充水元素。");
+
+        //五行与行业
+        fiveIndustry.put("木", "事业属性与木有直接或间接关联者,五行便属木。如:木制业、家具业、木材行、室内设计业、纸业、花业、园艺店、树苗盆栽业、医药医疗事业。文化事业、教育用品业、出版业、公务员、政界、安亲班、补习班、训练机构、宗教用品、画廊、装潢材料业、精品店、水果业、食品制造业、人才培育事业、布业、服饰业、窗帘业、茶叶行、栽种业、休闲农场等。");
+        fiveIndustry.put("火", "事业属性与热度和光线有关的所有行业,五行便属火。如 : 加工修理业、灯光照明事业、灯具厨具业、高热或易燃物品事业、加油站、石油酒精业、瓦斯行、热食饮食业、理发美容业、化妆品业、雕刻业、心理学家、演说家、歌舞戏剧表演业、印制品业、服饰店、面包店、窑业、陶瓷店、照相馆、光学仪器行等。");
+        fiveIndustry.put("土", "事业属性与土地、稳固、信赖有关的所有行业,五行便属土。如:农产品业、食品加工业、畜牧业、宠物店、饲料业、大理石业、砂石业、土地开发业、水泥建筑业、房屋中介业、当铺古董业、殡葬业、农具行、古物珠宝鉴定业、会计师、律师法官、代书、医师、设计人员、顾问代理商标业、垃圾清理掩埋、病虫害防治业、 资源回收业等。");
+        fiveIndustry.put("金", "事业属性与金有直接或间接关联者,五行便属金。如:五金商、矿产业、汽车业、交通业、机车行、货运快递业、金融业、车料制造业、珠宝业、工具机械业、电子业、电器业、仪器制造业、钟表业、电机制造业、电缆业、电讯业、通讯器材业、网络业、资讯业、铸造业、铁窗业、金属饰品业、银楼、锁店、武术馆、保全业、屠宰业、民意代表、大法官、属于铁或金属的材料工具业或买卖或制造业等。");
+        fiveIndustry.put("水", "事业属性为奔波、漂游、流动或与水有直接或间接关系的所有行业,五行便属水。如 : 服务业、人力中介业、婚姻交友中心、征信社、化学用品业、雨衣雨鞋制造业、旅游业、旅馆业、特技表演业、记者、航海业、水产业、冷冻冷藏业、洗衣业、渔具业、钓虾场、游泳池、制酒业、酒吧、消防器材业、咖啡屋、饮料业、染料业传播业、娱乐业、清洁消毒业等。");
+
+
+        //十神与行业
+        shiShenIndustry.put("正财", "您为正财格则适合从事公职工作,就是上班打工求财。这种八字如果做生意,也只能开门市,从事一些稳定的行业,不合适投机的项目。依靠稳定的工作收入。");
+        shiShenIndustry.put("偏财", "您为偏财格则适合创业做老板,另外分析八字组合。食神旺,是交际型,靠交友得到商机求财。伤官旺,是靠自己型,有独特的技能,或者靠体力求财。依靠不停的折腾成功。");
+        shiShenIndustry.put("正印", "适合服务行业,幼师,导游,护士,文化,教育,书法,写作记录文职。依靠付出爱心的工作。");
+        shiShenIndustry.put("偏印", "适合做顾问,分析师,设计师,作家,音乐家,心理学家,参谋,下棋,秘书。依靠脑力分析的工作。");
+        shiShenIndustry.put("食神", "适合做事餐饮业,也适合当文学家,艺术,艺术家,音乐家,美学专家,艺术鉴赏家,经济学家。依靠演艺和艺术方面比较容易成功。");
+        shiShenIndustry.put("伤官", "很聪明,头脑都相当好,但是兴趣多却不精通,性格傲慢,好胜,卖弄,张扬说话带刺,不招人喜欢。适合做歌唱,影视演艺,卖艺,马戏难耍,特技运动,考古探险等。依靠一项专精的技艺比较容易成功。");
+        shiShenIndustry.put("正官", "公正、 廉洁,一生正气,人品质高尚,有领导才能爱操心,受人尊敬适合做公务员,团队领导,公司中高层。依靠管理事务的工作。");
+        shiShenIndustry.put("七杀", "适合做公检法执法单位,二把手,有杀气的行业依靠找个人辅佐的工作。");
+
+        //天乙贵人
+        tianyiGuiren.put("甲", "亥未");
+        tianyiGuiren.put("戊", "亥未");
+        tianyiGuiren.put("乙", "子申");
+        tianyiGuiren.put("己", "子申");
+        tianyiGuiren.put("丙", "亥酉");
+        tianyiGuiren.put("丁", "亥酉");
+        tianyiGuiren.put("壬", "巳卯");
+        tianyiGuiren.put("癸", "巳卯");
+        tianyiGuiren.put("庚", "午寅");
+        tianyiGuiren.put("辛", "午寅");
+
+        //天乙贵人 生肖
+        tianyiGuirenShengXiao.put("甲", "猪羊");
+        tianyiGuirenShengXiao.put("戊", "猪羊");
+        tianyiGuirenShengXiao.put("乙", "鼠猴");
+        tianyiGuirenShengXiao.put("己", "鼠猴");
+        tianyiGuirenShengXiao.put("丙", "猪鸡");
+        tianyiGuirenShengXiao.put("丁", "猪鸡");
+        tianyiGuirenShengXiao.put("壬", "蛇兔");
+        tianyiGuirenShengXiao.put("癸", "蛇兔");
+        tianyiGuirenShengXiao.put("庚", "马虎");
+        tianyiGuirenShengXiao.put("辛", "马虎");
+
+
+        //袁天罡称骨算命
+        guZhong.put("甲子", 12);
+        guZhong.put("丙子", 16);
+        guZhong.put("戊子", 15);
+        guZhong.put("庚子", 7);
+        guZhong.put("壬子", 5);
+
+        guZhong.put("乙丑", 9);
+        guZhong.put("丁丑", 8);
+        guZhong.put("己丑", 7);
+        guZhong.put("辛丑", 7);
+        guZhong.put("癸丑", 7);
+
+        guZhong.put("丙寅", 6);
+        guZhong.put("戊寅", 8);
+        guZhong.put("庚寅", 9);
+        guZhong.put("壬寅", 9);
+        guZhong.put("甲寅", 12);
+
+        guZhong.put("丁卯", 7);
+        guZhong.put("己卯", 19);
+        guZhong.put("辛卯", 12);
+        guZhong.put("癸卯", 12);
+        guZhong.put("乙卯", 8);
+
+        guZhong.put("戊辰", 12);
+        guZhong.put("庚辰", 12);
+        guZhong.put("壬辰", 10);
+        guZhong.put("甲辰", 8);
+        guZhong.put("丙辰", 8);
+
+        guZhong.put("己巳", 5);
+        guZhong.put("辛巳", 6);
+        guZhong.put("癸巳", 7);
+        guZhong.put("乙巳", 7);
+        guZhong.put("丁巳", 6);
+
+        guZhong.put("庚午", 9);
+        guZhong.put("壬午", 8);
+        guZhong.put("甲午", 15);
+        guZhong.put("丙午", 13);
+        guZhong.put("戊午", 19);
+
+        guZhong.put("辛未", 8);
+        guZhong.put("癸未", 7);
+        guZhong.put("乙未", 6);
+        guZhong.put("丁未", 5);
+        guZhong.put("己未", 6);
+
+        guZhong.put("壬申", 7);
+        guZhong.put("甲申", 5);
+        guZhong.put("丙申", 5);
+        guZhong.put("戊申", 14);
+        guZhong.put("庚申", 8);
+
+        guZhong.put("癸酉", 8);
+        guZhong.put("乙酉", 15);
+        guZhong.put("丁酉", 14);
+        guZhong.put("己酉", 5);
+        guZhong.put("辛酉", 16);
+
+        guZhong.put("甲戌", 15);
+        guZhong.put("丙戌", 6);
+        guZhong.put("戊戌", 14);
+        guZhong.put("庚戌", 9);
+        guZhong.put("壬戌", 10);
+
+        guZhong.put("乙亥", 9);
+        guZhong.put("丁亥", 16);
+        guZhong.put("己亥", 9);
+        guZhong.put("辛亥", 17);
+        guZhong.put("癸亥", 6);
+
+        guZhong.put("1月", 6);
+        guZhong.put("2月", 7);
+        guZhong.put("3月", 18);
+        guZhong.put("4月", 9);
+        guZhong.put("5月", 5);
+        guZhong.put("6月", 16);
+        guZhong.put("7月", 9);
+        guZhong.put("8月", 15);
+        guZhong.put("9月", 18);
+        guZhong.put("10月", 8);
+        guZhong.put("11月", 9);
+        guZhong.put("12月", 5);
+
+        guZhong.put("1日", 5);
+        guZhong.put("2日", 10);
+        guZhong.put("3日", 8);
+        guZhong.put("4日", 15);
+        guZhong.put("5日", 16);
+        guZhong.put("6日", 15);
+        guZhong.put("7日", 8);
+        guZhong.put("8日", 16);
+        guZhong.put("9日", 8);
+        guZhong.put("10日", 16);
+        guZhong.put("11日", 9);
+        guZhong.put("12日", 17);
+        guZhong.put("13日", 8);
+        guZhong.put("14日", 17);
+        guZhong.put("15日", 10);
+        guZhong.put("16日", 8);
+        guZhong.put("17日", 9);
+        guZhong.put("18日", 18);
+        guZhong.put("19日", 5);
+        guZhong.put("20日", 10);
+        guZhong.put("21日", 10);
+        guZhong.put("22日", 9);
+        guZhong.put("23日", 8);
+        guZhong.put("24日", 9);
+        guZhong.put("25日", 15);
+        guZhong.put("26日", 18);
+        guZhong.put("27日", 7);
+        guZhong.put("28日", 8);
+        guZhong.put("29日", 16);
+        guZhong.put("30日", 6);
+
+        guZhong.put("子", 16);
+        guZhong.put("丑", 6);
+        guZhong.put("寅", 7);
+        guZhong.put("午", 10);
+        guZhong.put("未", 8);
+        guZhong.put("申", 8);
+        guZhong.put("卯", 10);
+        guZhong.put("辰", 9);
+        guZhong.put("巳", 16);
+        guZhong.put("酉", 9);
+        guZhong.put("戌", 6);
+        guZhong.put("亥", 6);
+
+        //男
+        guZhongPingYuMan.put("21", "此命非业谓大凶,平生灾害事桑重。凶祸频临陷逆境,终世困苦事不成。");
+        guZhongPingYuMan.put("22", "身寒骨冷苦伶仃,此命推来真气人。碌碌巴巴无度日,终年打拱过平年。");
+        guZhongPingYuMan.put("23", "此命推来骨自轻,求谋作事事难成。妻儿兄弟应难许,别处他乡作散人。");
+        guZhongPingYuMan.put("24", "此命推来福禄无,门庭困苦总难营。六亲骨肉皆无靠,流到他乡作老翁。");
+        guZhongPingYuMan.put("25", "此命推来祖业微,门庭营度似稀奇。六亲骨肉如冰炭,一生勤劳自把持。");
+        guZhongPingYuMan.put("26", "平生衣禄苦中求,独自经营事不休。离祖出门宜早计,晚来衣禄自无忧。");
+        guZhongPingYuMan.put("27", "一生作事少商量,难靠祖宗作主张。独马单枪空做去,早来晚岁部无长。");
+        guZhongPingYuMan.put("28", "一生作事似飘蓬,祖宗产业在梦中。若不过房并改姓,也当移徙两三通。");
+        guZhongPingYuMan.put("29", "初年运限未曾享,纵有功名在后底。须过四旬绕可上,移居改姓始为良。");
+        guZhongPingYuMan.put("30", "劳劳碌碌苦中求,东走西奔何日休。若使终身勤与俭,老来稍可免忧愁。");
+        guZhongPingYuMan.put("31", "忙忙碌碌苦中求,何日云开见日头。难得祖基家可立,中年衣食渐无忧。");
+        guZhongPingYuMan.put("32", "初年运蹇事难谋,渐有财源如水流。到得中年衣食旺,那时名利一齐来。");
+        guZhongPingYuMan.put("33", "早年做事事难成,百计徒劳枉费心。半世自如流水去,后来运到得黄金。");
+        guZhongPingYuMan.put("34", "此命福气果如何,僧道门中衣禄多。离祖出家方得妙,终朝拜佛念涌陀。");
+        guZhongPingYuMan.put("35", "平生福量不周全,祖业根基觉少传。营业生涯宜守旧,时来衣食胜从前。");
+        guZhongPingYuMan.put("36", "不须劳碌过平生,独自成家福不轻。早有福星常照命,任君行去百般成。");
+        guZhongPingYuMan.put("37", "此命般般事不成,弟兄少力自孤成。虽然祖业须微有,来得明时去得明。");
+        guZhongPingYuMan.put("38", "一生骨肉最清高,早入黄门姓名标。待看看将三十六,蓝袍脱去换红袍。");
+        guZhongPingYuMan.put("39", "此命终身运不穷,劳劳作事尽皆空。苦心竭力成家计,到得那时在梦中。");
+        guZhongPingYuMan.put("40", "生平衣禄是绵长,件件心中自主张。前面风霜多受过,后来必定享安康。");
+        guZhongPingYuMan.put("41", "此命推来事不同,为人能干略凡庸。中年还有逍遥福,不比前年运未通。");
+        guZhongPingYuMan.put("42", "得宽怀处且宽怀,何用双眉皱不开。若使中年命运济,那时名利一齐来。");
+        guZhongPingYuMan.put("43", "为人心性最聪明,作事轩昂近贵人。衣禄一生天数定,不须劳碌是丰享。");
+        guZhongPingYuMan.put("44", "来事由天莫苦求,须知福禄胜前途。当年财帛难如意,晚景欣然便不忧。");
+        guZhongPingYuMan.put("45", "名利推来竟若何,前途辛苦后奔波。命中难养男与女,骨肉扶持也不多。");
+        guZhongPingYuMan.put("46", "东西南北尽皆空,出姓移名更觉隆。衣禄无亏天数定,中年晚景一般同。");
+        guZhongPingYuMan.put("47", "此命推来旺末年,妻荣子贵自怡然。平生原有滔滔福,可有财源如水源。");
+        guZhongPingYuMan.put("48", "幼年运道未曾享,若是蹉跎再不兴。兄弟六亲皆无靠,一身事业晚年成。");
+        guZhongPingYuMan.put("49", "此命推来福不轻,自成自立耀门庭。从来富贵人亲近,使婢差奴过一生。");
+        guZhongPingYuMan.put("50", "为名为利终日劳,中年福禄也多遭。老来是有财星照,不比前番日下高。");
+        guZhongPingYuMan.put("51", "一世荣华事事通,不须劳碌自享丰。弟兄叔侄皆如意,家业成时福禄宏。");
+        guZhongPingYuMan.put("52", "一世享通事事能,不须劳思自然能。家族欣然心皆好,家业丰享自称心。");
+        guZhongPingYuMan.put("53", "此格推来气像真,兴家发达在其中。一生福禄安排家,欲是人间一富翁。");
+        guZhongPingYuMan.put("54", "此命推来厚且清,诗画满腹看功成。丰衣足食自然稳,正是人间有福人。");
+        guZhongPingYuMan.put("55", "走马扬鞭争名利,少年做事费筹谋。一朝福禄源源至,富贵荣华耀六亲。");
+        guZhongPingYuMan.put("56", "此格推来礼义通,一生福禄用无穷。甜酸苦辣皆尝过,财源滚滚稳且丰。");
+        guZhongPingYuMan.put("57", "福禄丰盈万事全,一生荣耀显双亲。名扬威振人钦敬,处世逍遥似遇春。");
+        guZhongPingYuMan.put("58", "平生福禄自然来,名利双全福禄偕。雁塔题名为贵客,紫袍玉带走金阶。");
+        guZhongPingYuMan.put("59", "细推此格妙且清,必定财高礼义通。甲第之中应有分,扬鞭走马显威荣。");
+        guZhongPingYuMan.put("60", "一朝金榜快题名,显祖荣宗立大功。衣食定然原裕足,田园财帛更丰盛。");
+        guZhongPingYuMan.put("61", "不作朝中金榜客,定为世上一财翁。聪明天赋经书熟,名显高科自是荣。");
+        guZhongPingYuMan.put("62", "此命推来福不穷,读书必定显亲宗。紫衣金带为卿相,富贵荣华皆可同。");
+        guZhongPingYuMan.put("63", "命主为官福禄长,得来富贵定非常。名题雁塔传金榜,定中高科天下扬。");
+        guZhongPingYuMan.put("64", "此格威权不可挡,紫袍金带坐高望。荣华富贵虽能及,积玉堆金满储仓。");
+        guZhongPingYuMan.put("65", "细推此命福不轻,安国安邦极品人。文纷雕梁徽富贵,威声照耀四方闻。");
+        guZhongPingYuMan.put("66", "此格人间一福人,堆金积玉满堂春。从来富贵由天定,正勿垂绅谒圣君。");
+        guZhongPingYuMan.put("67", "此命生来福自宏,田园家业最高隆。平生衣禄丰盈足,一世荣华万事通。");
+        guZhongPingYuMan.put("68", "富贵由大莫苦求,万金家计不须谋。十年不比前番事,祖业根基水上舟。");
+        guZhongPingYuMan.put("69", "君是人间前禄星,一生富贵众人钦。纵然福禄由天定,安享荣华过一生。");
+        guZhongPingYuMan.put("70", "此命推来福不轻,不须愁虑苦劳心。一生天定衣与禄,富贵荣华主一生。");
+        guZhongPingYuMan.put("71", "此命生来大不同,公侯卿相在其中。一生自有逍遥福,富贵荣华极品隆。");
+
+        //女
+        guZhongPingYuWoman.put("21", "生身此命运不通,乌云盖月黑朦胧,莫向故园载花木,可来幽地种青松。");
+        guZhongPingYuWoman.put("22", "女命孤冷独凄身,此身推来路乞人,操心烦恼难度日,一生痛苦度光阴。");
+        guZhongPingYuWoman.put("23", "女命生来轻薄人,营谋事作难称心,六亲骨肉亦无靠,奔走劳碌困苦门。");
+        guZhongPingYuWoman.put("24", "女命推来福禄无,治家艰难辛苦多,丈夫儿女不亲爱,奔走他乡作游姑。");
+        guZhongPingYuWoman.put("25", "此命一身八字低,家庭艰辛多苦妻,娘家亲友冷如炭,一生勤劳多忧眉。");
+        guZhongPingYuWoman.put("26", "平生依禄但苦求,两次配夫带忧愁,咸酸苦辣他偿过,晚年衣食本无忧。");
+        guZhongPingYuWoman.put("27", "此格做事单独强,难告夫君作主张,心问口来口问心,晚景衣禄宜自生。");
+        guZhongPingYuWoman.put("28", "女命生来八字轻,为善作事也无因,你把别人当亲生,别人对你假殷情。");
+        guZhongPingYuWoman.put("29", "花支艳来硬性身,自奔自力不求人,若问求财方可止,在苦有甜度光阴。");
+        guZhongPingYuWoman.put("30", "女命推来比郎强,婚姻大事碍无障,中年走过坎坷地,末年渐经行前强。");
+        guZhongPingYuWoman.put("31", "早年行运在忙头,劳碌奔波苦勤求,费力劳心把家立,后来晚景名忧愁。");
+        guZhongPingYuWoman.put("32", "时逢运来带吉神,从有凶星转灰尘,真变假来假成真,结拜弟妹当亲生。");
+        guZhongPingYuWoman.put("33", "初限命中有变化,中年可比树落花,勤俭持家难度日,晚年成业享荣华。");
+        guZhongPingYuWoman.put("34", "矮巴勾枣难捞枝,看破红尘最相宜,谋望求财空费力,婚姻三娶两次离。");
+        guZhongPingYuWoman.put("35", "女子走冰怕冰薄,出行交易受残霜,婚姻周郎休此意,官司口舌须相加。");
+        guZhongPingYuWoman.put("36", "忧悉常锁两眉间,家业挂心不等闲,从今以后防口角,任意行移不相关。");
+        guZhongPingYuWoman.put("37", "此命推来费运多,若作摧群受折磨,山路崎岖吊下耳,左插右安心难留。");
+        guZhongPingYuWoman.put("38", "凤鸣岐山四方扬,女命逢此大吉昌,走失夫君音信有,晚年衣禄财盈箱。");
+        guZhongPingYuWoman.put("39", "女命推来运未能,劳碌奔波一场空,好似俊乌在笼锁,中年未限凄秋风。");
+        guZhongPingYuWoman.put("40", "目前月令运不良,千辛万苦受煎熬,女身受得多苦难,晚年福禄比密甜。");
+        guZhongPingYuWoman.put("41", "此命推来一般艰,女子为人很非凡,中年逍遥多自在,晚年更比中年超。");
+        guZhongPingYuWoman.put("42", "杜井破废已多年,今有泉水出来鲜,资生济竭人称美,中运来转喜安然。");
+        guZhongPingYuWoman.put("43", "推车靠涯道路通,女名求财也无穷,婚姻出配无阻碍,疾病口舌离身躬。");
+        guZhongPingYuWoman.put("44", "夜梦金银醒来空,立志谋业运不通,婚姻难成交易散,夫君趟失未见踪。");
+        guZhongPingYuWoman.put("45", "女命终身驳杂多,六亲骨肉不相助,命中男女都难养,劳碌辛苦还奔波。");
+        guZhongPingYuWoman.put("46", "孤舟行水离沙滩,离乡出外早过家,是非口舌皆无碍,婚姻合配紫微房。");
+        guZhongPingYuWoman.put("47", "时来运转喜开颜,多年枯木逢春花,枝叶重生多茂盛,凡人见得都赞夸。");
+        guZhongPingYuWoman.put("48", "一朵鲜花镜中开,看着极好取不来,劝你休把镜花想,此命推来主可癫。");
+        guZhongPingYuWoman.put("49", "一生为人福宏名,心兹随君显门庭,容貌美丽惹人爱,银钱富足万事成。");
+        guZhongPingYuWoman.put("50", "马氏太公不相和,好命逢此忧凝多,恩人无义反为仇,是非平地起风波。");
+        guZhongPingYuWoman.put("51", "肥羊一群入出场,防虎逢之把口张,适口充饥心欢喜,女命八字大吉昌。");
+        guZhongPingYuWoman.put("52", "顺风行舟扯起帆,上天又助一顺风,不用费力逍遥去,任意顺行大享通。");
+        guZhongPingYuWoman.put("53", "此命相貌眉目清,文武双全功名成,一生衣禄皆无缺,可算世上积福人。");
+        guZhongPingYuWoman.put("54", "运开满腹好文章,谋事求财大吉祥,出行交易多得稳,到处享通姓名扬。");
+        guZhongPingYuWoman.put("55", "发政旅仁志量高,女命求财任他乡,交舍婚姻多有意,无君出外有音耗。");
+        guZhongPingYuWoman.put("56", "明珠辉吐离埃来,女有口有清散开,走失郎君当两归,交易有成永无灾。");
+        guZhongPingYuWoman.put("57", "游鱼戏水被网惊,踊身变化入龙门,三根杨柳垂金钱,万朵桃花显价能。");
+        guZhongPingYuWoman.put("58", "此命推来转悠悠,时运未来莫强求,幸得今日重反点,自有好运在后头。");
+        guZhongPingYuWoman.put("59", "雨雪载途活泥泞,交易不安难出生,疾病还拉婚姻慢,谋望求财事难寻。");
+        guZhongPingYuWoman.put("60", "女命八字喜气和,谋事求财吉庆多,口舌渐消疾病少,夫君走别归老巢。");
+        guZhongPingYuWoman.put("61", "缘木求鱼事多难,虽不得鱼无害反,若是行险弄巧地,事不遂心枉安凡。");
+        guZhongPingYuWoman.put("62", "指日高升气象新,走失待人有信音,好命遇事遂心好,伺病口舌皆除根。");
+        guZhongPingYuWoman.put("63", "五官脱运难抬头,妇命须当把财求,交易少行有人助,一生衣禄不须愁。");
+        guZhongPingYuWoman.put("64", "俊乌曾得出胧中,脱离为难显威风,一朝得意福力至,东南西北任意通。");
+        guZhongPingYuWoman.put("65", "女命推来福非轻,兹善为事受人敬,天降文王开基业,八百年来富贵门。");
+        guZhongPingYuWoman.put("66", "时来运转闺阁楼,贤德淑女君子求,击鼓乐之大吉庆,女命逢此喜悠悠。");
+        guZhongPingYuWoman.put("67", "乱丝无头定有头,碰得亲事暂折磨,交易出行无好处,谋事求财心不遂。");
+        guZhongPingYuWoman.put("68", "水底明月不可捞,女命早限运未高,交易出行难获利,未运终得渐见好。");
+        guZhongPingYuWoman.put("69", "太公封祖不非凡,女子求财稳如山,交易合伙多吉庆,疾病口角遗天涯。");
+        guZhongPingYuWoman.put("70", "本命推断喜气新,恰遇郎君金遂心,坤身来交正当运,富贵衣禄乐平生。");
+        guZhongPingYuWoman.put("71", "此命推来宏运交,不须再愁苦劳难,一生身有衣禄福,安享荣华胜班超。");
+
+        piQi.put("七杀", "暴脾气大多数是坐下七杀地支,由于七杀呈现出一种压迫的态势,就好像长工和地主老财一样的紧张关系,说不得,一说就炸。最不喜欢被人批评,内心维系着自己可怜的小自尊,把别人对自己的看法看的很重要。所以坐下七杀的爱面子,不主动讨人厌,把自己的谦卑退缩当做了示爱的方式,时时都站在底限上说话,一旦触及底线,立马爆炸。所以处理问题比较粗暴,简单,不委婉,性子刚烈,脾气暴。严重的有暴力倾向,身太旺好打个仗,身太弱的话,又懦弱不成器。");
+        piQi.put("食神", "脾气急一般都体现在日坐食伤这种地支上,脾气上来的快,气撒的也快。由于食伤富有主观意识,爱憎分明,看不顺眼的就要说。所以,日坐食伤的嘴快,容易得罪人。大多数坐下食伤的都比较真诚,性格外向,热心肠。身弱的容易杂嘴子,唠唠叨叨的。");
+        piQi.put("伤官", "脾气急一般都体现在日坐食伤这种地支上,脾气上来的快,气撒的也快。由于食伤富有主观意识,爱憎分明,看不顺眼的就要说。所以,日坐食伤的嘴快,容易得罪人。大多数坐下食伤的都比较真诚,性格外向,热心肠。身弱的容易杂嘴子,唠唠叨叨的。");
+        piQi.put("正官", "脾气最好的大概是坐下正官。坐下正官的,克勤克俭,兢兢业业做事情。一般都很自律,不会因为个人的私欲去影响到别人。");
+        piQi.put("正印", "脾气最好的大概是坐下正印。而坐下正印的,通常缺乏积极性,危机意识不强,易于满足,相对乐观,所以也不会产生一种让人警惕和排挤的感觉,这两种大多都亲和力挺强,性格温和善良。也有好人主义思想,没有阶级对立意识,有爱心,因此脾气都相对好。");
+        piQi.put("偏印", "脾气最好的大概是坐下正印。而坐下正印的,通常缺乏积极性,危机意识不强,易于满足,相对乐观,所以也不会产生一种让人警惕和排挤的感觉,这两种大多都亲和力挺强,性格温和善良。也有好人主义思想,没有阶级对立意识,有爱心,因此脾气都相对好。");
+        piQi.put("比肩", "犟脾气一般都是坐下比劫日主的特点。关键一个词是‘不服’。由于坐下比劫旺地,自己意气用事的多,直来直去,考虑问题不会拐弯,听不出正反话。容易信以为真,轻信朋友,做事情鲁莽缺乏认真思考和缜密的观察。通常是撞到南墙之后才懂得原来是这么回事。更甚至,有一部分是装了南北东西四面墙之后,也不知道总结教训经验,下次照样。这种日主最喜身弱,尤其是喜财杀当头,这样的话就会认真面对成长,面对生活。要是身旺的话,简直就是个惹事的祖宗,吆五喝六东来西去的,没有一刻消停。");
+        piQi.put("劫财", "犟脾气一般都是坐下比劫日主的特点。关键一个词是‘不服’。由于坐下比劫旺地,自己意气用事的多,直来直去,考虑问题不会拐弯,听不出正反话。容易信以为真,轻信朋友,做事情鲁莽缺乏认真思考和缜密的观察。通常是撞到南墙之后才懂得原来是这么回事。更甚至,有一部分是装了南北东西四面墙之后,也不知道总结教训经验,下次照样。这种日主最喜身弱,尤其是喜财杀当头,这样的话就会认真面对成长,面对生活。要是身旺的话,简直就是个惹事的祖宗,吆五喝六东来西去的,没有一刻消停。");
+        piQi.put("正财", "日元正坐正财/偏财、脾气倔,是因为太主观,过于自信引起的。从不为别人改变自己,严重的会过度自信,自我放大。或者是从不承认错误,自以为是。由于坐下是财星,而日主为君,一副目空一切的样子,天王老子第一,我第二,所以很难接受意见和建议。如果是财旺的,又自命清高,视金钱如粪土。如果身旺的,又贪婪多欲,好色逞强。");
+        piQi.put("偏财", "日元正坐正财/偏财、脾气倔,是因为太主观,过于自信引起的。从不为别人改变自己,严重的会过度自信,自我放大。或者是从不承认错误,自以为是。由于坐下是财星,而日主为君,一副目空一切的样子,天王老子第一,我第二,所以很难接受意见和建议。如果是财旺的,又自命清高,视金钱如粪土。如果身旺的,又贪婪多欲,好色逞强。");
+
+        wuGui.put("子", "辰");
+        wuGui.put("丑", "巳");
+        wuGui.put("寅", "午");
+        wuGui.put("卯", "未");
+        wuGui.put("辰", "申");
+        wuGui.put("巳", "酉");
+        wuGui.put("午", "戌");
+        wuGui.put("未", "亥");
+        wuGui.put("申", "子");
+        wuGui.put("酉", "丑");
+        wuGui.put("戌", "寅");
+        wuGui.put("亥", "卯");
+
+        wuGuiShengXiao.put("子", "龙");
+        wuGuiShengXiao.put("丑", "蛇");
+        wuGuiShengXiao.put("寅", "马");
+        wuGuiShengXiao.put("卯", "羊");
+        wuGuiShengXiao.put("辰", "猴");
+        wuGuiShengXiao.put("巳", "鸡");
+        wuGuiShengXiao.put("午", "狗");
+        wuGuiShengXiao.put("未", "猪");
+        wuGuiShengXiao.put("申", "鼠");
+        wuGuiShengXiao.put("酉", "牛");
+        wuGuiShengXiao.put("戌", "虎");
+        wuGuiShengXiao.put("亥", "兔");
+
+        taoHuaZi.add("子");
+        taoHuaZi.add("午");
+        taoHuaZi.add("卯");
+        taoHuaZi.add("酉");
+
+    }
+
+
+    public static int generateRelationship(String element1, String element2) {
+        // 五行关系的映射关系
+        String[][] relationships = {
+                //木属性
+                {"木", "火", "1"},    //木生火 = 1
+                {"木", "土", "2"},    //木克土 = 2
+                {"木", "金", "3"},    //木被金克 = 3
+                {"木", "水", "4"},    //木被水生 = 4
+                {"木", "木", "0"},    //木被木生=  0
+                // 火属性
+                {"火", "土", "1"},    //火生土 = 1
+                {"火", "金", "2"},    //火克金 = 2
+                {"火", "水", "3"},    //火被水克 = 3
+                {"火", "木", "4"},    //火被木生 = 4
+                {"火", "火", "0"},    //火被火生 = 0
+                // 土属性的关系
+                {"土", "金", "1"},    //土生金 = 1
+                {"土", "水", "2"},    //土克水 = 2
+                {"土", "木", "3"},    //土被木克 = 3
+                {"土", "火", "4"},    //土被火生 = 4
+                {"土", "土", "0"},    //土被土生 = 0
+                // 金属性的关系
+                {"金", "水", "1"},    //金生水 = 1
+                {"金", "木", "2"},    //金克木 = 2
+                {"金", "火", "3"},    //金被火克 = 3
+                {"金", "土", "4"},    //金被土生 = 4
+                {"金", "金", "0"},    //金被金生 = 0
+                // 水属性的关系
+                {"水", "木", "1"},    //水生木 = 1
+                {"水", "火", "2"},    //水克火 = 2
+                {"水", "土", "3"},    //水被土克 = 3
+                {"水", "金", "4"},    //水被金生 = 4
+                {"水", "水", "0"},    //水被水生 = 0
+        };
+
+        // 查找两个元素之间的关系
+        for (String[] relationship : relationships) {
+            if (relationship[0].equals(element1) && relationship[1].equals(element2)) {
+                int result = Integer.parseInt(relationship[2]);
+                if (result == 1 || result == 2 || result == 3) { //减分
+                    return -1;
+                } else if (result == 4 || result == 0) {    //加减
+                    return 1;
+                }
+            }
+        }
+        // 如果没有找到对应关系,可以返回一个默认值或抛出异常,这里简单返回 -1
+        return -99;
+    }
+
+    public static String fangWei(String line) {
+        String result = "";
+
+        if (line.contains("喜神方位")) {
+            result += "喜神代表着喜庆和好运,方位位于";
+        } else if (line.contains("阳贵神方位")) {
+            result += "阳贵神有助于事业和权力,方位位于";
+        } else if (line.contains("阴贵神方位")) {
+            result += "阴贵神有助于家庭和人际关系,方位位于";
+        } else if (line.contains("福神方位")) {
+            result += "福神有助于吸引福气,方位位于";
+        } else if (line.contains("财神方位")) {
+            result += "财神有助于财富积累,方位位于";
+        } else if (line.contains("煞")) {
+            result += "而煞方位为";
+        } else {
+            result += line; // 如果不是以上情况,原样输出
+        }
+
+        if (line.contains("正东")) {
+            result += "正东";
+        } else if (line.contains("正西")) {
+            result += "正西";
+        } else if (line.contains("正南")) {
+            result += "正南";
+        } else if (line.contains("正北")) {
+            result += "正北";
+        } else if (line.contains("东北")) {
+            result += "东北";
+        } else if (line.contains("东南")) {
+            result += "东南";
+        } else if (line.contains("西南")) {
+            result += "西南";
+        } else if (line.contains("西北")) {
+            result += "西北";
+        } else if (line.contains("东")) {
+            result += "东";
+        } else if (line.contains("西")) {
+            result += "西";
+        } else if (line.contains("南")) {
+            result += "南";
+        } else if (line.contains("北")) {
+            result += "北";
+        }
+
+        return result;
+    }
+
+
+    // 定义一个方法,接收三个参数并返回最大值
+    public static int getMax(int num1, int num2, int num3) {
+        int max = num1;
+        // 比较 num2 和 max
+        if (num2 > max) {
+            max = num2;
+        }
+
+        // 再比较 num3 和 max
+        if (num3 > max) {
+            max = num3;
+        }
+
+        if (max == num1) {
+            return 1;
+        }
+        if (max == num2) {
+            return 2;
+        }
+        if (max == num3) {
+            return 3;
+        }
+        return 0;
+    }
+
+
+}

+ 8 - 11
nbjk-common/src/main/java/com/miaxis/common/config/WxPayConfigImpl.java → nbjk-common/src/main/java/com/miaxis/common/config/WxPayAppConfigImpl.java

@@ -1,7 +1,6 @@
 package com.miaxis.common.config;
 
 import com.github.wxpay.sdk.WXPayConfig;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.ClassPathResource;
 
 import java.io.ByteArrayInputStream;
@@ -10,28 +9,26 @@ import java.io.FileInputStream;
 import java.io.InputStream;
 
 
-public class WxPayConfigImpl implements WXPayConfig {
+public class WxPayAppConfigImpl implements WXPayConfig {
     public static String url = "你设置的回调接口";
-    private static WxPayConfigImpl wxPayConfig;
+    private static WxPayAppConfigImpl wxPayConfig;
     private byte[] certData = null;
 
 
 //    @Resource
 //    private WxpayConfig wxpayConfigBean;
 
-    @Value("${app.appid}")
-    private String appid;
 
-    public static WxPayConfigImpl getInstance() {
+    public static WxPayAppConfigImpl getInstance() {
         if (wxPayConfig == null) {
-            synchronized (WxPayConfigImpl.class) {
-                wxPayConfig = new WxPayConfigImpl();
+            synchronized (WxPayAppConfigImpl.class) {
+                wxPayConfig = new WxPayAppConfigImpl();
             }
         }
         return wxPayConfig;
     }
 
-    public WxPayConfigImpl() {
+    public WxPayAppConfigImpl() {
         try {
             //这个证书的位置不是瞎鸡儿填的,你要在这个路径真的有一个证书
             // InputStream is = new FileInputStream("F:\\jpcj\\jpcj\\jpcj-admin\\src\\main\\resources\\wechatpay\\apiclient_cert.p12");
@@ -51,7 +48,7 @@ public class WxPayConfigImpl implements WXPayConfig {
 
     @Override
     public String getAppID() {
-        return "wx3043c2c1decb01ed";
+        return "wxfb80ed2dac7a6bb9";
     }
 
     @Override
@@ -61,7 +58,7 @@ public class WxPayConfigImpl implements WXPayConfig {
 
     @Override
     public String getKey() {
-        return "qqwweerrttyyuuiioopp123456789000";
+        return "ac7eb47efc59f3cdbec46d3bf3a68627";
     }
 
     @Override

+ 91 - 0
nbjk-common/src/main/java/com/miaxis/common/config/WxPayXcxConfigImpl.java

@@ -0,0 +1,91 @@
+package com.miaxis.common.config;
+
+import com.github.wxpay.sdk.WXPayConfig;
+import org.springframework.core.io.ClassPathResource;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+
+public class WxPayXcxConfigImpl implements WXPayConfig {
+    public static String url = "你设置的回调接口";
+    private static WxPayXcxConfigImpl wxPayConfig;
+    private byte[] certData = null;
+
+
+//    @Resource
+//    private WxpayConfig wxpayConfigBean;
+
+
+    public static WxPayXcxConfigImpl getInstance() {
+        if (wxPayConfig == null) {
+            synchronized (WxPayXcxConfigImpl.class) {
+                wxPayConfig = new WxPayXcxConfigImpl();
+            }
+        }
+        return wxPayConfig;
+    }
+
+    public WxPayXcxConfigImpl() {
+        try {
+            //这个证书的位置不是瞎鸡儿填的,你要在这个路径真的有一个证书
+            // InputStream is = new FileInputStream("F:\\jpcj\\jpcj\\jpcj-admin\\src\\main\\resources\\wechatpay\\apiclient_cert.p12");
+            InputStream is = new FileInputStream(new ClassPathResource("wechatpay/apiclient_cert.p12").getFile());
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            byte[] bs = new byte[1024];
+            int cnt = -1;
+            while ((cnt = is.read(bs)) != -1) {
+                baos.write(bs, 0, cnt);
+            }
+            is.close();
+            certData = baos.toByteArray();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public String getAppID() {
+        return "wx97bbc22daac9362a";
+    }
+
+    @Override
+    public String getMchID() {
+        return "1639487489";
+    }
+
+    @Override
+    public String getKey() {
+        return "PIQKEpG1FEoBEELgv0GUxkUJKTkc0jGB";
+    }
+
+    @Override
+    public InputStream getCertStream() {
+        ByteArrayInputStream certBis;
+        certBis = new ByteArrayInputStream(this.certData);
+        return certBis;
+    }
+
+    @Override
+    public int getHttpConnectTimeoutMs() {
+        // TODO Auto-generated method stub
+        return 8000;
+    }
+
+    @Override
+    public int getHttpReadTimeoutMs() {
+        // TODO Auto-generated method stub
+        return 10000;
+    }
+
+
+    public String getPrimaryDomain() {
+        return "api.mch.weixin.qq.com";
+    }
+
+    public String getNotifyUrl(){
+        return url;
+    }
+}

+ 2 - 5
nbjk-common/src/main/java/com/miaxis/common/core/domain/model/LoginUser.java

@@ -10,10 +10,7 @@ import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 登录用户身份权限
@@ -300,7 +297,7 @@ public class LoginUser implements UserDetails
             }
             return roleList;
         }else {
-            return null;
+            return Collections.emptyList();
         }
 
 

+ 62 - 0
nbjk-service/src/main/java/com/miaxis/birthday/domain/BirthdayLog.java

@@ -0,0 +1,62 @@
+package com.miaxis.birthday.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.miaxis.common.annotation.Excel;
+import com.miaxis.common.core.domain.BaseBusinessEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 查询记录对象 birthday_log
+ *
+ * @author miaxis
+ * @date 2023-12-11
+ */
+@Data
+@TableName("birthday_log")
+@ApiModel(value = "BirthdayLog", description = "查询记录对象 birthday_log")
+public class BirthdayLog extends BaseBusinessEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    @ApiModelProperty(value = "$column.columnComment")
+    private Long id;
+
+    /** 查询姓名 */
+    @Excel(name = "查询姓名")
+    @TableField("name")
+    @ApiModelProperty(value = "查询姓名")
+    private String name;
+
+    /** 性别 */
+    @Excel(name = "性别")
+    @TableField("sex")
+    @ApiModelProperty(value = "性别")
+    private String sex;
+
+    /** 生日 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "生日", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @TableField("birthday")
+    @ApiModelProperty(value = "生日")
+    private Date birthday;
+
+    /** 查询用户ID */
+    @Excel(name = "查询用户ID")
+    @TableField("user_id")
+    @ApiModelProperty(value = "查询用户ID", hidden = true)
+    private Long userId;
+
+    /** 是否付费 0:未付费 1:基础版  2:高级版 */
+    @Excel(name = "是否付费 0:未付费 1:基础版  2:高级版")
+    @TableField("is_pay")
+    @ApiModelProperty(value = "是否付费 0:未付费 1:基础版  2:高级版")
+    private Long isPay;
+}

+ 62 - 0
nbjk-service/src/main/java/com/miaxis/birthday/dto/BirthdayLogDto.java

@@ -0,0 +1,62 @@
+package com.miaxis.birthday.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.miaxis.common.annotation.Excel;
+import com.miaxis.common.core.domain.BaseBusinessEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 查询记录对象 birthday_log
+ *
+ * @author miaxis
+ * @date 2023-12-11
+ */
+@Data
+@TableName("birthday_log")
+@ApiModel(value = "BirthdayLog", description = "查询记录对象 birthday_log")
+public class BirthdayLogDto extends BaseBusinessEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    @ApiModelProperty(value = "$column.columnComment")
+    private Long id;
+
+    /** 查询姓名 */
+    @Excel(name = "查询姓名")
+    @TableField("name")
+    @ApiModelProperty(value = "查询姓名")
+    private String name;
+
+    /** 性别 */
+    @Excel(name = "性别")
+    @TableField("sex")
+    @ApiModelProperty(value = "性别")
+    private String sex;
+
+    /** 生日 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "生日", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @TableField("birthday")
+    @ApiModelProperty(value = "生日")
+    private Date birthday;
+
+    /** 查询用户ID */
+    @Excel(name = "查询用户ID")
+    @TableField("user_id")
+    @ApiModelProperty(value = "查询用户ID", hidden = true)
+    private Long userId;
+
+    /** 是否付费 0:未付费 1:基础版  2:高级版 */
+    @Excel(name = "是否付费 0:未付费 1:基础版  2:高级版")
+    @TableField("is_pay")
+    @ApiModelProperty(value = "是否付费 0:未付费 1:基础版  2:高级版")
+    private Long isPay;
+}

+ 29 - 0
nbjk-service/src/main/java/com/miaxis/birthday/mapper/BirthdayLogMapper.java

@@ -0,0 +1,29 @@
+package com.miaxis.birthday.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.miaxis.birthday.domain.BirthdayLog;
+
+import java.util.List;
+
+/**
+ * 查询记录Mapper接口
+ *
+ * @author miaxis
+ * @date 2023-12-11
+ */
+public interface BirthdayLogMapper extends BaseMapper<BirthdayLog> {
+    /**
+     * 查询查询记录列表
+     *
+     * @param birthdayLog 查询记录
+     * @return 查询记录集合
+     */
+    public List<BirthdayLog> selectBirthdayLogList(BirthdayLog birthdayLog);
+
+
+    public int selectBirthdayLogCount(BirthdayLog birthdayLog);
+
+    public BirthdayLog selectBirthdayLogId(BirthdayLog birthdayLog);
+
+
+}

+ 24 - 0
nbjk-service/src/main/java/com/miaxis/birthday/service/IBirthdayLogService.java

@@ -0,0 +1,24 @@
+package com.miaxis.birthday.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.miaxis.birthday.domain.BirthdayLog;
+
+import java.util.List;
+
+/**
+ * 查询记录Service接口
+ *
+ * @author miaxis
+ * @date 2023-12-11
+ */
+public interface IBirthdayLogService extends IService<BirthdayLog>{
+    /**
+     * 查询查询记录列表
+     *
+     * @param birthdayLog 查询记录
+     * @return 查询记录集合
+     */
+    List<BirthdayLog> selectBirthdayLogList(BirthdayLog birthdayLog);
+
+    BirthdayLog saveBirthdayLog(BirthdayLog birthdayLog);
+}

+ 59 - 0
nbjk-service/src/main/java/com/miaxis/birthday/service/impl/BirthdayLogServiceImpl.java

@@ -0,0 +1,59 @@
+package com.miaxis.birthday.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.miaxis.birthday.domain.BirthdayLog;
+import com.miaxis.birthday.mapper.BirthdayLogMapper;
+import com.miaxis.birthday.service.IBirthdayLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 查询记录Service业务层处理
+ *
+ * @author miaxis
+ * @date 2023-12-11
+ */
+@Service
+@Slf4j
+public class BirthdayLogServiceImpl extends ServiceImpl<BirthdayLogMapper, BirthdayLog> implements IBirthdayLogService {
+    @Autowired
+    private BirthdayLogMapper birthdayLogMapper;
+
+    /**
+     * 查询查询记录列表
+     *
+     * @param birthdayLog 查询记录
+     * @return 查询记录
+     */
+    @Override
+    public List<BirthdayLog> selectBirthdayLogList(BirthdayLog birthdayLog){
+        return birthdayLogMapper.selectBirthdayLogList(birthdayLog);
+    }
+
+
+
+    /**
+     * 查询记录表
+     *
+     * @param birthdayLog 查询记录
+     * @return 查询记录
+     */
+    @Override
+    public BirthdayLog saveBirthdayLog(BirthdayLog birthdayLog){
+        int count = birthdayLogMapper.selectBirthdayLogCount(birthdayLog);
+
+        if(count>0) {
+            log.info("当前查询8字已存在");
+            return birthdayLogMapper.selectBirthdayLogId(birthdayLog);
+        } else {
+            this.save(birthdayLog);
+            return birthdayLogMapper.selectBirthdayLogId(birthdayLog);
+        }
+
+    }
+
+
+}

+ 13 - 1
nbjk-service/src/main/java/com/miaxis/order/domain/OrderInfo.java

@@ -90,13 +90,25 @@ public class OrderInfo extends BaseBusinessEntity{
     @ApiModelProperty(value = "退款订单编号")
     private String outRefundNo;
 
+    /** 分账订单编号 */
+    @Excel(name = "订单编号")
+    @TableField("out_split_no")
+    @ApiModelProperty(value = "订单编号")
+    private String outSplitNo;
 
-    /** 总金额*/
+
+    /** 总金额 */
     @Excel(name = "总金额")
     @TableField("total")
     @ApiModelProperty(value = "总金额")
     private Integer total;
 
+    /** 分账金额 */
+    @Excel(name = "分账金额")
+    @TableField("split_price")
+    @ApiModelProperty(value = "分账金额")
+    private Integer splitPrice;
+
     /** 交易状态 1、支付成功2、支付失败*/
     @Excel(name = "交易状态 1、支付成功2、支付失败")
     @TableField("trade_type")

+ 57 - 0
nbjk-service/src/main/java/com/miaxis/order/domain/OrderSplit.java

@@ -0,0 +1,57 @@
+package com.miaxis.order.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.miaxis.common.annotation.Excel;
+import com.miaxis.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.miaxis.common.core.domain.BaseBusinessEntity;
+import lombok.Data;
+/**
+ * 分账记录对象 order_split
+ *
+ * @author miaxis
+ * @date 2023-12-27
+ */
+@Data
+@TableName("order_split")
+@ApiModel(value = "OrderSplit", description = "分账记录对象 order_split")
+public class OrderSplit extends BaseBusinessEntity{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    @TableId(value = "id")
+    @ApiModelProperty(value = "ID")
+    private Long id;
+
+    /** 商户内部分账订单ID */
+    @Excel(name = "商户内部分账订单ID")
+    @TableField("out_split_no")
+    @ApiModelProperty(value = "商户内部分账订单ID")
+    private String outSplitNo;
+
+    /** 分账金额 */
+    @Excel(name = "分账金额")
+    @TableField("amount")
+    @ApiModelProperty(value = "分账金额")
+    private Integer amount;
+
+    /** 分账到openid或商户号 */
+    @Excel(name = "分账到openid或商户号")
+    @TableField("open_id")
+    @ApiModelProperty(value = "分账到openid或商户号")
+    private String openId;
+
+    /** 描述 */
+    @Excel(name = "描述")
+    @TableField("description")
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+
+}

+ 22 - 0
nbjk-service/src/main/java/com/miaxis/order/mapper/OrderSplitMapper.java

@@ -0,0 +1,22 @@
+package com.miaxis.order.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.miaxis.order.domain.OrderSplit;
+
+/**
+ * 分账记录Mapper接口
+ *
+ * @author miaxis
+ * @date 2023-12-27
+ */
+public interface OrderSplitMapper extends BaseMapper<OrderSplit> {
+    /**
+     * 查询分账记录列表
+     *
+     * @param orderSplit 分账记录
+     * @return 分账记录集合
+     */
+    public List<OrderSplit> selectOrderSplitList(OrderSplit orderSplit);
+
+}

+ 21 - 0
nbjk-service/src/main/java/com/miaxis/order/service/IOrderSplitService.java

@@ -0,0 +1,21 @@
+package com.miaxis.order.service;
+
+import java.util.List;
+import com.miaxis.order.domain.OrderSplit;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 分账记录Service接口
+ *
+ * @author miaxis
+ * @date 2023-12-27
+ */
+public interface IOrderSplitService extends IService<OrderSplit>{
+    /**
+     * 查询分账记录列表
+     *
+     * @param orderSplit 分账记录
+     * @return 分账记录集合
+     */
+    public List<OrderSplit> selectOrderSplitList(OrderSplit orderSplit);
+}

+ 12 - 0
nbjk-service/src/main/java/com/miaxis/order/service/impl/OrderInfoServiceImpl.java

@@ -1,6 +1,8 @@
 package com.miaxis.order.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.miaxis.birthday.domain.BirthdayLog;
+import com.miaxis.birthday.service.IBirthdayLogService;
 import com.miaxis.exam.domain.ExamInfo;
 import com.miaxis.exam.service.IExamInfoService;
 import com.miaxis.order.domain.OrderInfo;
@@ -40,6 +42,10 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
     @Autowired
     private IVipExamVideoService vipExamVideoService;
+
+    @Autowired
+    private IBirthdayLogService birthdayLogService;
+
     /**
      * 查询ad列表
      *
@@ -92,6 +98,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
             this.save(orderInfo);
         } else if(order.getGoodsType()==2) { //商品
             //添加会员信息
+        } else if(order.getGoodsType()==3) { //八字
+            //添加八字信息
+            BirthdayLog birthdayLog = birthdayLogService.getById(order.getGoodsId());
+            birthdayLog.setIsPay(1l);
+            birthdayLogService.saveOrUpdate(birthdayLog);
+            this.save(orderInfo);
         }
 
     }

+ 36 - 0
nbjk-service/src/main/java/com/miaxis/order/service/impl/OrderSplitServiceImpl.java

@@ -0,0 +1,36 @@
+package com.miaxis.order.service.impl;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.miaxis.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.apache.commons.lang3.StringUtils;
+import com.miaxis.order.mapper.OrderSplitMapper;
+import com.miaxis.order.domain.OrderSplit;
+import com.miaxis.order.service.IOrderSplitService;
+
+/**
+ * 分账记录Service业务层处理
+ *
+ * @author miaxis
+ * @date 2023-12-27
+ */
+@Service
+public class OrderSplitServiceImpl extends ServiceImpl<OrderSplitMapper, OrderSplit> implements IOrderSplitService {
+    @Autowired
+    private OrderSplitMapper orderSplitMapper;
+
+    /**
+     * 查询分账记录列表
+     *
+     * @param orderSplit 分账记录
+     * @return 分账记录
+     */
+    @Override
+    public List<OrderSplit> selectOrderSplitList(OrderSplit orderSplit){
+        return orderSplitMapper.selectOrderSplitList(orderSplit);
+    }
+}

+ 7 - 0
nbjk-service/src/main/java/com/miaxis/wx/domain/WxOrder.java

@@ -193,5 +193,12 @@ public class WxOrder extends BaseBusinessEntity{
     private Integer foreType;
 
 
+    /** 是否分账 0不分账 1待分账 3分账完成 */
+    @Excel(name = "是否分账 0不分账 1待分账 3分账完成")
+    @TableField("profit_sharing")
+    @ApiModelProperty(value = "是否分账 0不分账 1待分账 3分账完成")
+    private Integer profitSharing;
+
+
 
 }

+ 1 - 1
nbjk-service/src/main/java/com/miaxis/wx/dto/WxOrderDTO.java

@@ -12,7 +12,7 @@ public class WxOrderDTO {
     @ApiModelProperty(value = "商品ID(考场ID)",required = true)
     private Long goodsId;
 
-    @ApiModelProperty(value = "商品类型 1:考场 2:实物",required = true)
+    @ApiModelProperty(value = "商品类型 1:考场 2:实物 3:八字排盘",required = true)
     private Long goodsType;
 
     @ApiModelProperty(value = "手机类型 1苹果 2安卓",required = true)

+ 20 - 0
nbjk-service/src/main/java/com/miaxis/wx/dto/WxOrderProfitDTO.java

@@ -0,0 +1,20 @@
+package com.miaxis.wx.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class WxOrderProfitDTO {
+    private static final long serialVersionUID = 1L;
+
+
+
+    @ApiModelProperty(value = "时间",required = true)
+    private String nowDate;
+
+
+
+
+}

+ 5 - 0
nbjk-service/src/main/java/com/miaxis/wx/mapper/WxOrderMapper.java

@@ -5,7 +5,9 @@ import com.miaxis.wx.domain.WxOrder;
 import com.miaxis.wx.dto.PcWxOrderListDTO;
 import com.miaxis.wx.dto.QuerySchoolOrderListDTO;
 import com.miaxis.wx.dto.WxOrderListDTO;
+import com.miaxis.wx.dto.WxOrderProfitDTO;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -30,4 +32,7 @@ public interface WxOrderMapper extends BaseMapper<WxOrder> {
     List<WxOrder> selectPcOrderList(PcWxOrderListDTO pcWxOrderListDTO);
 
     List<WxOrder> QuerySchoolOrderList(QuerySchoolOrderListDTO dto);
+
+    List<WxOrder> selectWxOrderByWaitProfit(String nowDate);
+
 }

+ 8 - 3
nbjk-service/src/main/java/com/miaxis/wx/service/IWxOrderService.java

@@ -1,9 +1,8 @@
 package com.miaxis.wx.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.miaxis.common.core.domain.entity.SysDictData;
 import com.miaxis.wx.domain.WxOrder;
-import com.miaxis.wx.dto.*;
+import com.miaxis.wx.dto.WxExtractBankDTO;
 
 import java.util.List;
 
@@ -12,10 +11,16 @@ import java.util.List;
 public interface IWxOrderService extends IService<WxOrder>{
 
 
-    WxOrder getByOutTradeNo(String outTradeNo);
+    void wxAddFenZhang() throws Exception;
+
+    boolean wxProfitsharing(WxOrder wxOrder) throws  Exception;
 
+    WxOrder getByOutTradeNo(String outTradeNo);
 
     String wxwithdrawal(Integer amount) throws Exception;
 
     String wxwithbankdrawal(WxExtractBankDTO amount) throws Exception;
+
+    List<WxOrder> selectWxOrderByWaitProfit();
+
 }

+ 152 - 27
nbjk-service/src/main/java/com/miaxis/wx/service/impl/WxOrderServiceImpl.java

@@ -2,27 +2,30 @@ package com.miaxis.wx.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.wxpay.sdk.WXPay;
 import com.github.wxpay.sdk.WXPayConfig;
 import com.github.wxpay.sdk.WXPayConstants;
 import com.github.wxpay.sdk.WXPayUtil;
-import com.miaxis.common.config.WxPayConfigImpl;
+import com.miaxis.common.config.WxPayXcxConfigImpl;
 import com.miaxis.common.config.WxpayConfig;
-import com.miaxis.common.core.domain.entity.SysDictData;
 import com.miaxis.common.core.domain.entity.UserInfo;
-import com.miaxis.common.enums.OrderStatusEnum;
 import com.miaxis.common.exception.CustomException;
+import com.miaxis.common.utils.DateUtils;
 import com.miaxis.common.utils.RSAUtils;
 import com.miaxis.common.utils.SecurityUtils;
 import com.miaxis.common.utils.XmlUtil;
+import com.miaxis.order.domain.OrderInfo;
+import com.miaxis.order.domain.OrderSplit;
+import com.miaxis.order.service.IOrderInfoService;
+import com.miaxis.order.service.IOrderSplitService;
 import com.miaxis.system.service.ISysConfigService;
 import com.miaxis.user.service.IUserInfoService;
 import com.miaxis.wx.domain.WxExtract;
 import com.miaxis.wx.domain.WxExtractBank;
 import com.miaxis.wx.domain.WxOrder;
-import com.miaxis.wx.dto.PcWxOrderListDTO;
-import com.miaxis.wx.dto.QuerySchoolOrderListDTO;
 import com.miaxis.wx.dto.WxExtractBankDTO;
+import com.miaxis.wx.dto.WxOrderProfitDTO;
 import com.miaxis.wx.mapper.WxOrderMapper;
 import com.miaxis.wx.service.IWxExtractBankService;
 import com.miaxis.wx.service.IWxExtractService;
@@ -36,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -51,12 +55,21 @@ import static com.miaxis.common.utils.OrderCodeFactory.getOrderCode;
 @Service
 @Slf4j
 public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> implements IWxOrderService {
+
+
     @Resource
     private WxOrderMapper wxOrderMapper;
 
     @Autowired
     private IWxExtractService wxExtractService;
 
+    @Autowired
+    private IOrderInfoService orderInfoService;
+
+    @Autowired
+    private IOrderSplitService orderSplitService;
+
+
     @Autowired
     private RSAUtils rsaUtils;
 
@@ -71,9 +84,105 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
     @Autowired
     private IWxExtractBankService wxExtractBankService;
 
-    @Value("${gzh.appid}")
-    private String appid;
+    @Value("${xcx.appId}")
+    private String xcxAppid;
+
+    @Value("${xcx.mchId}")
+    private String mchId;
+
+
+    @Override
+    @Transactional
+    public void wxAddFenZhang() throws Exception {
+        String url = "https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver";
+
+        String nonceStr = RandomStringUtils.randomAlphanumeric(32);
+        //用于签名
+        Map<String, String> sortMap = new TreeMap<String, String>();
+        sortMap.put("mch_id", mchId);
+        sortMap.put("appid", xcxAppid);
+        sortMap.put("nonce_str", nonceStr);
+        sortMap.put("sign_type", "HMAC-SHA256");
+        Map<String, String> receiverMap = new TreeMap<String, String>();
+        receiverMap.put("type", "PERSONAL_OPENID");
+        receiverMap.put("account", "o7N3j5XxUrgOKE4ulP-HseFpBCiM");
+        receiverMap.put("relation_type", "SERVICE_PROVIDER");  //合作合伙
+        ObjectMapper objectMapper = new ObjectMapper();
+        String receiverMapJson = objectMapper.writeValueAsString(receiverMap);
+        sortMap.put("receiver", receiverMapJson);
+
+        WXPayConfig config = new WxPayXcxConfigImpl();
+        String sign = WXPayUtil.generateSignature(sortMap, config.getKey(), WXPayConstants.SignType.HMACSHA256);
+        sortMap.put("sign", sign);
 
+        WXPay pay = new WXPay(config);
+        String xmlStr = pay.requestWithoutCert(url, sortMap, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
+
+        Map<String, String> resMap = XmlUtil.xmlToMap(xmlStr);
+        if (!"SUCCESS".equals(resMap.get("return_code")) || !"SUCCESS".equals(resMap.get("result_code"))) {
+            throw new CustomException("微信添加分账出错");
+        }
+        System.out.println(xmlStr);
+    }
+
+
+    /**
+     * @return
+     * @throws Exception
+     */
+    @Override
+    @Transactional
+    public boolean wxProfitsharing(WxOrder wxOrder) throws Exception {
+        String url = "https://api.mch.weixin.qq.com/secapi/pay/profitsharing";
+        String nonceStr = RandomStringUtils.randomAlphanumeric(32);
+        //用于签名
+        Map<String, String> sortMap = new TreeMap<String, String>();
+        sortMap.put("mch_id", mchId);
+        sortMap.put("appid", xcxAppid);
+        sortMap.put("nonce_str", nonceStr);
+        sortMap.put("sign_type", "HMAC-SHA256");
+        sortMap.put("transaction_id", wxOrder.getTransactionId());
+        String orderCode = getOrderCode(wxOrder.getUserId()); //商户分账单号
+        sortMap.put("out_order_no", orderCode);
+
+        //扣除手续费后
+        double commission = wxOrder.getTotal() * 0.01;
+        double total = wxOrder.getTotal() - commission;
+        int amount = (int) Math.floor(total * 0.3);
+
+        Map<String, Object> receiverMap = new TreeMap<String, Object>();
+        receiverMap.put("type", "PERSONAL_OPENID");
+        receiverMap.put("account", "o7N3j5XxUrgOKE4ulP-HseFpBCiM");
+        receiverMap.put("amount", amount);
+        receiverMap.put("description", "分到个人");  //合作合伙
+        ObjectMapper objectMapper = new ObjectMapper();
+        String receiverMapJson = objectMapper.writeValueAsString(receiverMap);
+        sortMap.put("receivers", receiverMapJson);
+
+        WXPayConfig config = new WxPayXcxConfigImpl();
+        String sign = WXPayUtil.generateSignature(sortMap, config.getKey(), WXPayConstants.SignType.HMACSHA256);
+        sortMap.put("sign", sign);
+
+        WXPay pay = new WXPay(config);
+        String xmlStr = pay.requestWithCert(url, sortMap, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
+        Map<String, String> resMap = XmlUtil.xmlToMap(xmlStr);
+        if (!"SUCCESS".equals(resMap.get("return_code")) || !"SUCCESS".equals(resMap.get("result_code"))) {
+            //throw new CustomException("微信分账出错");
+            log.info("微信分账出错");
+            return false;
+        }
+        //更新成交订单表
+        OrderInfo orderInfo = orderInfoService.getByOutTradeNo(wxOrder.getOutTradeNo());
+        orderInfo.setOutSplitNo(orderCode);
+        orderInfoService.updateById(orderInfo);
+        OrderSplit orderSplit = new OrderSplit();
+        orderSplit.setOutSplitNo(orderCode);
+        orderSplit.setAmount(amount);
+      //  orderSplit.setOpenId("o7N3j5XxUrgOKE4ulP-HseFpBCiM");
+        orderSplit.setOpenId("obYLX6C7ln62silx-KP73Nd9jUB0");
+        orderSplit.setDescription("分到个人");
+        return orderSplitService.save(orderSplit);
+    }
 
 
     @Override
@@ -92,16 +201,16 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
 //        }
 
         Map<String, String> sortMap = new TreeMap<String, String>();
-        sortMap.put("mch_appid",appid);
-        sortMap.put("mchid",wxpayConfig.getMerchantId());
+        sortMap.put("mch_appid", mchId);
+        sortMap.put("mchid", wxpayConfig.getMerchantId());
         sortMap.put("nonce_str", RandomStringUtils.randomAlphanumeric(32));
-        sortMap.put("partner_trade_no",getOrderCode(null));
+        sortMap.put("partner_trade_no", getOrderCode(null));
         //sortMap.put("openid",student.getGzhOpenid());
-        sortMap.put("check_name","NO_CHECK");
-        sortMap.put("amount",String.valueOf(amount));
-        sortMap.put("desc","用户提现");
+        sortMap.put("check_name", "NO_CHECK");
+        sortMap.put("amount", String.valueOf(amount));
+        sortMap.put("desc", "用户提现");
 
-        WXPayConfig config = new WxPayConfigImpl();
+        WXPayConfig config = new WxPayXcxConfigImpl();
         String sign = WXPayUtil.generateSignature(sortMap, config.getKey(), WXPayConstants.SignType.MD5);
         sortMap.put("sign", sign);
         WXPay pay = new WXPay(config);
@@ -110,7 +219,7 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
         Map<String, String> resMap;
         String xmlStr = pay.requestWithCert(url, sortMap, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
         resMap = XmlUtil.xmlToMap(xmlStr);
-        if (!"SUCCESS".equals(resMap.get("return_code"))||!"SUCCESS".equals(resMap.get("result_code"))){
+        if (!"SUCCESS".equals(resMap.get("return_code")) || !"SUCCESS".equals(resMap.get("result_code"))) {
             throw new CustomException(resMap.get("return_msg"));
         }
         //新增提现记录
@@ -138,23 +247,21 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
 //        }
 
         Map<String, String> sortMap = new TreeMap<String, String>();
-        sortMap.put("mch_id",wxpayConfig.getMerchantId());
+        sortMap.put("mch_id", wxpayConfig.getMerchantId());
         sortMap.put("nonce_str", RandomStringUtils.randomAlphanumeric(32));
-        sortMap.put("partner_trade_no",getOrderCode(null));
-        sortMap.put("amount",String.valueOf(dto.getAmount()));
-        sortMap.put("desc","用户银行卡提现");
-
-
+        sortMap.put("partner_trade_no", getOrderCode(null));
+        sortMap.put("amount", String.valueOf(dto.getAmount()));
+        sortMap.put("desc", "用户银行卡提现");
 
 
         // 进行签名服务
 
-        sortMap.put("enc_true_name",rsaUtils.encryptData(dto.getEncTrueName()) );
-        sortMap.put("enc_bank_no",rsaUtils.encryptData(dto.getEncBankNo()));
-        sortMap.put("bank_code",dto.getBankCode().toString());
+        sortMap.put("enc_true_name", rsaUtils.encryptData(dto.getEncTrueName()));
+        sortMap.put("enc_bank_no", rsaUtils.encryptData(dto.getEncBankNo()));
+        sortMap.put("bank_code", dto.getBankCode().toString());
 
 
-        WXPayConfig config = new WxPayConfigImpl();
+        WXPayConfig config = new WxPayXcxConfigImpl();
         String sign = WXPayUtil.generateSignature(sortMap, config.getKey(), WXPayConstants.SignType.MD5);
         sortMap.put("sign", sign);
         WXPay pay = new WXPay(config);
@@ -163,7 +270,7 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
         Map<String, String> resMap;
         String xmlStr = pay.requestWithCert(url, sortMap, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
         resMap = XmlUtil.xmlToMap(xmlStr);
-        if (!"SUCCESS".equals(resMap.get("return_code"))||!"SUCCESS".equals(resMap.get("result_code"))){
+        if (!"SUCCESS".equals(resMap.get("return_code")) || !"SUCCESS".equals(resMap.get("result_code"))) {
             throw new CustomException(resMap.get("return_msg"));
         }
         //新增提现记录
@@ -176,7 +283,7 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
 
         //如果此卡之前未存储,则加入到银行卡列表
         List<WxExtractBank> bankList = wxExtractBankService.list(new QueryWrapper<WxExtractBank>().eq("enc_bank_no", dto.getEncBankNo()));
-        if (CollectionUtils.isEmpty(bankList)){
+        if (CollectionUtils.isEmpty(bankList)) {
             WxExtractBank wxExtractBank = new WxExtractBank();
             wxExtractBank.setBankCode(dto.getBankCode());
             wxExtractBank.setEncBankNo(dto.getEncBankNo());
@@ -193,5 +300,23 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
         return resMap.get("return_msg");
     }
 
+    @Override
+    public List<WxOrder> selectWxOrderByWaitProfit() {
+
+        // 获取当前时间
+        Date currentDate = new Date();
+        // 添加5分钟
+        long fiveMinutesInMillis = 5 * 60 * 1000; // 5分钟的毫秒数
+        Date nowDate = new Date(currentDate.getTime() - fiveMinutesInMillis);
+
+        WxOrderProfitDTO wxOrderProfitDTO = new WxOrderProfitDTO();
+
+        String nowDateStr = DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", nowDate);
+
+        wxOrderProfitDTO.setNowDate(nowDateStr);
+        List<WxOrder> wxOrderList = wxOrderMapper.selectWxOrderByWaitProfit(nowDateStr);
+        return wxOrderList;
+    }
+
 
 }

+ 55 - 0
nbjk-service/src/main/resources/mapper/birthday/BirthdayLogMapper.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.miaxis.birthday.mapper.BirthdayLogMapper">
+
+    <resultMap type="BirthdayLog" id="BirthdayLogResult">
+        <result property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="sex" column="sex"/>
+        <result property="birthday" column="birthday"/>
+        <result property="userId" column="user_id"/>
+        <result property="isPay" column="is_pay"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <sql id="selectBirthdayLogVo">
+        select * from birthday_log
+    </sql>
+
+    <select id="selectBirthdayLogList" parameterType="BirthdayLog" resultMap="BirthdayLogResult">
+        <include refid="selectBirthdayLogVo"/>
+        <where>
+            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
+            <if test="sex != null  and sex != ''">and sex = #{sex}</if>
+            <if test="birthday != null ">and birthday = #{birthday}</if>
+            <if test="userId != null ">and user_id = #{userId}</if>
+            <if test="isPay != null ">and is_pay = #{isPay}</if>
+        </where>
+    </select>
+
+
+    <select id="selectBirthdayLogCount" parameterType="BirthdayLog" resultType="int">
+        select count(1) from birthday_log
+        <where>
+            <if test="name != null  and name != ''">and name = #{name}</if>
+            <if test="sex != null  and sex != ''">and sex = #{sex}</if>
+            <if test="birthday != null ">and birthday = #{birthday}</if>
+            <if test="userId != null ">and user_id = #{userId}</if>
+        </where>
+    </select>
+
+    <select id="selectBirthdayLogId" parameterType="BirthdayLog" resultMap="BirthdayLogResult">
+        select * from birthday_log
+        <where>
+            <if test="name != null  and name != ''">and name = #{name}</if>
+            <if test="sex != null  and sex != ''">and sex = #{sex}</if>
+            <if test="birthday != null ">and birthday = #{birthday}</if>
+            <if test="userId != null ">and user_id = #{userId}</if>
+        </where>
+    </select>
+
+
+</mapper>

+ 2 - 1
nbjk-service/src/main/resources/mapper/order/OrderInfoMapper.xml

@@ -13,7 +13,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="appOpenid"    column="app_openid"    />
         <result property="xcxOpenid"    column="xcx_openid"    />
         <result property="gzhOpenid"    column="gzh_openid"    />
-        <result property="out_trade_no"    column="outTradeNo"    />
+        <result property="outTradeNo"    column="out_trade_no"    />
+        <result property="outSplitNo"    column="out_split_no"    />
         <result property="outRefundNo"    column="out_refund_no"    />
         <result property="total"    column="total"    />
         <result property="tradeType"    column="trade_type"    />

+ 75 - 60
nbjk-service/src/main/resources/mapper/wx/WxOrderMapper.xml

@@ -1,86 +1,91 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.miaxis.wx.mapper.WxOrderMapper">
 
     <resultMap type="WxOrder" id="WxOrderResult">
-        <result property="id"    column="id"    />
-        <result property="goodsId"    column="goods_id"    />
-        <result property="goodsName"    column="goods_name"    />
-        <result property="userId"    column="user_id"    />
-        <result property="unionId"    column="union_id"    />
-        <result property="appOpenid"    column="app_openid"    />
-        <result property="xcxOpenid"    column="xcx_openid"    />
-        <result property="gzhOpenid"    column="gzh_openid"    />
-        <result property="outTradeNo"    column="out_trade_no"    />
-        <result property="outRefundNo"    column="out_refund_no"    />
-        <result property="refundReason"    column="refund_reason"    />
-        <result property="transactionId"    column="transaction_id"    />
-        <result property="tradeType"    column="trade_type"    />
-        <result property="tradeState"    column="trade_state"    />
-        <result property="tradeStateDesc"    column="trade_state_desc"    />
-        <result property="bankType"    column="bank_type"    />
-        <result property="attach"    column="attach"    />
-        <result property="successTime"    column="success_time"    />
-        <result property="total"    column="total"    />
-        <result property="payerTotal"    column="payer_total"    />
-        <result property="currency"    column="currency"    />
-        <result property="payerCurrency"    column="payer_currency"    />
-        <result property="orderStatus"    column="order_status"    />
-        <result property="phoneType"    column="phone_type"    />
-        <result property="foreType"    column="fore_type"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateTime"    column="update_time"    />
+        <result property="id" column="id"/>
+        <result property="goodsId" column="goods_id"/>
+        <result property="goodsName" column="goods_name"/>
+        <result property="userId" column="user_id"/>
+        <result property="unionId" column="union_id"/>
+        <result property="appOpenid" column="app_openid"/>
+        <result property="xcxOpenid" column="xcx_openid"/>
+        <result property="gzhOpenid" column="gzh_openid"/>
+        <result property="outTradeNo" column="out_trade_no"/>
+        <result property="outRefundNo" column="out_refund_no"/>
+        <result property="refundReason" column="refund_reason"/>
+        <result property="transactionId" column="transaction_id"/>
+        <result property="tradeType" column="trade_type"/>
+        <result property="tradeState" column="trade_state"/>
+        <result property="tradeStateDesc" column="trade_state_desc"/>
+        <result property="bankType" column="bank_type"/>
+        <result property="attach" column="attach"/>
+        <result property="successTime" column="success_time"/>
+        <result property="total" column="total"/>
+        <result property="payerTotal" column="payer_total"/>
+        <result property="currency" column="currency"/>
+        <result property="payerCurrency" column="payer_currency"/>
+        <result property="orderStatus" column="order_status"/>
+        <result property="phoneType" column="phone_type"/>
+        <result property="foreType" column="fore_type"/>
+        <result property="profitSharing" column="profit_sharing"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
     </resultMap>
 
     <sql id="selectWxOrderVo">
-        select * from wx_order
+        select *
+        from wx_order
     </sql>
 
     <select id="getByOutTradeNo" parameterType="string" resultType="com.miaxis.wx.domain.WxOrder">
-         select * from wx_order where out_trade_no =#{outTradeNo}
+        select *
+        from wx_order
+        where out_trade_no = #{outTradeNo}
     </select>
 
 
     <select id="selectWxOrderList" parameterType="WxOrder" resultMap="WxOrderResult">
         <include refid="selectWxOrderVo"/>
         <where>
-            <if test="goodsId != null"> and goods_id = #{goodsId}</if>
-            <if test="goodsName != null  and goodsName != ''"> and goods_name like concat('%', #{goodsName}, '%')</if>
-            <if test="userId != null"> and user_id = #{userId}</if>
-            <if test="unionId != null  and unionId != ''"> and union_id = #{unionId}</if>
-            <if test="outTradeNo != null and outTradeNo != ''"> and out_trade_no = #{outTradeNo}</if>
-            <if test="outRefundNo != null and outRefundNo != ''"> and out_refund_no = #{outRefundNo}</if>
-            <if test="refundReason != null and refundReason != ''"> and refund_reason = #{refundReason}</if>
-            <if test="transactionId != null  and transactionId != ''"> and transaction_id = #{transactionId}</if>
-            <if test="tradeType != null  and tradeType != ''"> and trade_type = #{tradeType}</if>
-            <if test="tradeState != null  and tradeState != ''"> and trade_state = #{tradeState}</if>
-            <if test="tradeStateDesc != null  and tradeStateDesc != ''"> and trade_state_desc = #{tradeStateDesc}</if>
-            <if test="bankType != null  and bankType != ''"> and bank_type = #{bankType}</if>
-            <if test="attach != null  and attach != ''"> and attach = #{attach}</if>
-            <if test="successTime != null "> and success_time = #{successTime}</if>
-            <if test="total != null "> and total = #{total}</if>
-            <if test="payerTotal != null "> and payer_total = #{payerTotal}</if>
-            <if test="currency != null  and currency != ''"> and currency = #{currency}</if>
-            <if test="payerCurrency != null  and payerCurrency != ''"> and payer_currency = #{payerCurrency}</if>
-            <if test="orderStatus != null  and orderStatus != ''"> and order_status = #{orderStatus}</if>
-            <if test="phoneType != null"> and phone_type = #{phoneType}</if>
-            <if test="foreType != null"> and fore_type = #{foreType}</if>
+            <if test="goodsId != null">and goods_id = #{goodsId}</if>
+            <if test="goodsName != null  and goodsName != ''">and goods_name like concat('%', #{goodsName}, '%')</if>
+            <if test="userId != null">and user_id = #{userId}</if>
+            <if test="unionId != null  and unionId != ''">and union_id = #{unionId}</if>
+            <if test="outTradeNo != null and outTradeNo != ''">and out_trade_no = #{outTradeNo}</if>
+            <if test="outRefundNo != null and outRefundNo != ''">and out_refund_no = #{outRefundNo}</if>
+            <if test="refundReason != null and refundReason != ''">and refund_reason = #{refundReason}</if>
+            <if test="transactionId != null  and transactionId != ''">and transaction_id = #{transactionId}</if>
+            <if test="tradeType != null  and tradeType != ''">and trade_type = #{tradeType}</if>
+            <if test="tradeState != null  and tradeState != ''">and trade_state = #{tradeState}</if>
+            <if test="tradeStateDesc != null  and tradeStateDesc != ''">and trade_state_desc = #{tradeStateDesc}</if>
+            <if test="bankType != null  and bankType != ''">and bank_type = #{bankType}</if>
+            <if test="attach != null  and attach != ''">and attach = #{attach}</if>
+            <if test="successTime != null ">and success_time = #{successTime}</if>
+            <if test="total != null ">and total = #{total}</if>
+            <if test="payerTotal != null ">and payer_total = #{payerTotal}</if>
+            <if test="currency != null  and currency != ''">and currency = #{currency}</if>
+            <if test="payerCurrency != null  and payerCurrency != ''">and payer_currency = #{payerCurrency}</if>
+            <if test="orderStatus != null  and orderStatus != ''">and order_status = #{orderStatus}</if>
+            <if test="profitSharing != null">and profit_sharing = #{profitSharing}</if>
+            <if test="phoneType != null">and phone_type = #{phoneType}</if>
+            <if test="foreType != null">and fore_type = #{foreType}</if>
         </where>
     </select>
 
 
     <select id="selectOrderList" resultType="com.miaxis.wx.domain.WxOrder">
         select * from wx_order
-         where openid=#{openid} and trade_state ='SUCCESS'
+        where openid=#{openid} and trade_state ='SUCCESS'
         <if test="days != null  and days != ''">
-            and  DATE_SUB(CURDATE(), INTERVAL #{days} DAY) &lt;= date(create_time)
+            and DATE_SUB(CURDATE(), INTERVAL #{days} DAY) &lt;= date(create_time)
         </if>
         <if test="orderStatus != null  and orderStatus != ''">
-            and  order_status = #{orderStatus}
+            and order_status = #{orderStatus}
         </if>
-         order by create_time desc
+        order by create_time desc
     </select>
 
 
@@ -88,13 +93,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select * from wx_order
         where trade_state ='SUCCESS'
         <if test="outTradeNo != null  and outTradeNo != ''">
-            and  out_trade_no = #{outTradeNo}
+            and out_trade_no = #{outTradeNo}
         </if>
         <if test="orderStatus != null  and orderStatus != ''">
-            and  order_status = #{orderStatus}
+            and order_status = #{orderStatus}
         </if>
         <if test="goodsType != null  and goodsType != ''">
-            and  goods_type = #{goodsType}
+            and goods_type = #{goodsType}
         </if>
         <if test="startTime != null">
             and DATE_FORMAT(create_time,'%Y-%m-%d')<![CDATA[ >= ]]> #{startTime}
@@ -110,7 +115,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select * from wx_order
         where trade_state ='SUCCESS'
         <if test="referralUserId != null  and referralUserId != ''">
-            and  referral_user_id = #{referralUserId}
+            and referral_user_id = #{referralUserId}
         </if>
         <if test="startTime != null">
             and DATE_FORMAT(create_time,'%Y-%m-%d')<![CDATA[ >= ]]> #{startTime}
@@ -121,4 +126,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by create_time desc
     </select>
 
+
+    <select id="selectWxOrderByWaitProfit" resultType="com.miaxis.wx.domain.WxOrder">
+        select * from wx_order where trade_state ='SUCCESS' and profit_sharing = 1
+        <if test="nowDate != null"><!-- 开始时间检索 -->
+            and DATE_FORMAT(success_time,'%Y-%m-%d %H:%i:%S') <![CDATA[ <= ]]> #{nowDate}
+        </if>
+        order by success_time
+    </select>
+
+
 </mapper>