Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

dongke 2 lat temu
rodzic
commit
32d2121e38
21 zmienionych plików z 457 dodań i 284 usunięć
  1. 0 14
      src/main/java/com/dk/mdm/controller/common/CommonController.java
  2. 3 2
      src/main/java/com/dk/mdm/controller/core/UserController.java
  3. 1 0
      src/main/java/com/dk/mdm/controller/mst/StaffController.java
  4. 7 6
      src/main/java/com/dk/mdm/controller/wxapi/basic/WechatPayController.java
  5. 3 3
      src/main/java/com/dk/mdm/generator/Generator.java
  6. 10 0
      src/main/java/com/dk/mdm/infrastructure/convert/mst/StaffConvert.java
  7. 22 0
      src/main/java/com/dk/mdm/infrastructure/convert/mst/StaffRightConvert.java
  8. 44 42
      src/main/java/com/dk/mdm/infrastructure/util/AuthUtils.java
  9. 1 1
      src/main/java/com/dk/mdm/mapper/common/CommonMapper.xml
  10. 16 0
      src/main/java/com/dk/mdm/mapper/mst/StaffMapper.java
  11. 14 0
      src/main/java/com/dk/mdm/mapper/mst/StaffMapper.xml
  12. 50 18
      src/main/java/com/dk/mdm/mapper/sale/OrderItemMapper.xml
  13. 11 2
      src/main/java/com/dk/mdm/model/response/mst/StaffResponse.java
  14. 9 0
      src/main/java/com/dk/mdm/model/response/sale/OrderItemResponse.java
  15. 62 20
      src/main/java/com/dk/mdm/service/common/CommonService.java
  16. 166 160
      src/main/java/com/dk/mdm/service/core/UserService.java
  17. 20 0
      src/main/java/com/dk/mdm/service/ivt/OutboundService.java
  18. 3 7
      src/main/java/com/dk/mdm/service/mst/MoneyAccountService.java
  19. 5 0
      src/main/java/com/dk/mdm/service/mst/StaffService.java
  20. 7 7
      src/main/java/com/dk/mdm/service/wxapi/basic/WechatPayService.java
  21. 3 2
      src/main/resources/dev/bootstrap.yml

+ 0 - 14
src/main/java/com/dk/mdm/controller/common/CommonController.java

@@ -77,20 +77,6 @@ public class CommonController extends BaseController<Map<String, Object>> {
     }
 
     /**
-     * @desc : 获取最大显示顺序
-     * @author : 周兴
-     * @date : 2023/1/6 12:47
-     */
-    @ApiOperation(
-            value = "获取最大显示顺序",
-            notes = "获取最大显示顺序"
-    )
-    @PostMapping("get_max_display_no")
-    public ResponseResultVO<Integer> getMaxDisplayNo(@RequestBody Map<String, Object> param) {
-        return commonService.getMaxDisplayNo(param);
-    }
-
-    /**
      * @desc : 获取系统表数据种类
      * @author : 周兴
      * @date : 2023/1/6 12:47

+ 3 - 2
src/main/java/com/dk/mdm/controller/core/UserController.java

@@ -2,6 +2,7 @@ package com.dk.mdm.controller.core;
 
 import com.alibaba.fastjson.JSONObject;
 import com.dk.common.model.pojo.PageList;
+import com.dk.common.model.vo.core.StaffEntity;
 import com.dk.common.model.vo.core.UserVO;
 import com.dk.common.response.ResponseResultUtil;
 import com.dk.common.response.ResponseResultVO;
@@ -85,8 +86,8 @@ public class UserController{
      * @date : 2022-06-07 16:10
      */
     @PostMapping("get_current")
-    public ResponseResultVO<UserVO> getCurrent() {
-        return ResponseResultUtil.success(authUtils.getUser());
+    public ResponseResultVO<StaffEntity> getCurrent() {
+        return ResponseResultUtil.success(authUtils.getStaff());
     }
 
     /**

+ 1 - 0
src/main/java/com/dk/mdm/controller/mst/StaffController.java

@@ -1,6 +1,7 @@
 package com.dk.mdm.controller.mst;
 
 import com.dk.common.model.pojo.PageList;
+import com.dk.common.model.vo.core.StaffEntity;
 import com.dk.common.response.ResponseResultVO;
 import com.dk.common.util.ExcelUtils;
 import com.dk.mdm.model.pojo.mst.Staff; 

+ 7 - 6
src/main/java/com/dk/mdm/controller/wxapi/basic/WechatPayController.java

@@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Map;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -35,21 +36,21 @@ public class WechatPayController {
     private WechatPayService wechatPayService;
 
     /**
-     * 商户 下单选取旗舰版或专业版的订单
+     * 商户 下单选取旗舰版或专业版的订单-预支付订单
      *
-     * @param paymentSn
+     * @param param
      * @return
      * @throws WxPayException
      */
-    @ApiOperation(value = "下单选取旗舰版或专业版的订单")
+    @ApiOperation(value = "下单选取旗舰版或专业版的订单预支付订单")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "openId", value = "openId"),
             @ApiImplicitParam(name = "paymentSn", value = "支付单号")
     })
-    @PostMapping("/create_order/{openId}/{paymentSn}")
-    public ResponseResultVO createOrderMiniPlat(@PathVariable String paymentSn, @PathVariable String openId)
+    @PostMapping("/unified_order")
+    public ResponseResultVO unifiedOrder(@RequestBody Map<String, Object> param)
             throws WxPayException {
-        return wechatPayService.createOrderMiniPlat(paymentSn, openId);
+        return wechatPayService.unifiedOrder(param);
     }
 
     /**

+ 3 - 3
src/main/java/com/dk/mdm/generator/Generator.java

@@ -53,7 +53,7 @@ public class Generator {
         GlobalConfig gc = new GlobalConfig();
         String projectPath = System.getProperty("user.dir");    //获取当前目录
         gc.setOutputDir(projectPath+"/src/main/java");          //输出到哪个目录
-        gc.setAuthor("宋杨");                                    //作者
+        gc.setAuthor("姜永辉");                                    //作者
         gc.setOpen(false);                                      //是否打开目录
         gc.setFileOverride(false);                              //是否覆盖
         gc.setServiceName("%sService");                         //去Service的I前缀
@@ -95,8 +95,8 @@ public class Generator {
         //4、策略配置
         StrategyConfig strategy = new StrategyConfig();
         strategy.setTablePrefix("t_mst");                                             //表名前缀
-        strategy.setInclude("t_mst_supplier");                                        //设置要映射的表名,只需改这里即可,可以是一个数组,一次性生成多张表。
-        strategy.setInclude("t_mst_money_account");                                        //设置要映射的表名,只需改这里即可,可以是一个数组,一次性生成多张表。
+        strategy.setInclude("t_mst_setting_value");                                        //设置要映射的表名,只需改这里即可,可以是一个数组,一次性生成多张表。
+//        strategy.setInclude("t_mst_setting_value");                                        //设置要映射的表名,只需改这里即可,可以是一个数组,一次性生成多张表。
         strategy.setNaming(NamingStrategy.underline_to_camel);                      //转驼峰
         strategy.setColumnNaming(NamingStrategy.underline_to_camel);                //字段下划线转驼峰
         strategy.setEntityLombokModel(true);                                        //是否使用lombok开启注解

+ 10 - 0
src/main/java/com/dk/mdm/infrastructure/convert/mst/StaffConvert.java

@@ -1,6 +1,8 @@
 package com.dk.mdm.infrastructure.convert.mst;
 
+import com.dk.common.model.vo.core.StaffEntity;
 import com.dk.mdm.model.pojo.mst.Staff;
+import com.dk.mdm.model.response.mst.StaffResponse;
 import com.dk.mdm.model.vo.mst.StaffVO;
 import org.mapstruct.Mapper;
 
@@ -19,4 +21,12 @@ public interface StaffConvert {
      */
     Staff convertToPo(StaffVO staffVO);
 
+    /**
+     * @desc   : 转换pojo为Entity
+     *
+     * @author : admin
+     * @date   : 2023/1/9 10:37
+     */
+    StaffEntity convertToEntity(StaffResponse staff);
+
 }

+ 22 - 0
src/main/java/com/dk/mdm/infrastructure/convert/mst/StaffRightConvert.java

@@ -0,0 +1,22 @@
+package com.dk.mdm.infrastructure.convert.mst;
+
+import com.dk.mdm.model.pojo.mst.StaffRight;
+import com.dk.mdm.model.vo.mst.StaffRightVO;
+import org.mapstruct.Mapper;
+
+/**
+ * @desc   : StaffRightConvert
+ * @author : admin
+ * @date   : 2023/2/3 15:44
+ */
+@Mapper(componentModel = "spring")
+public interface StaffRightConvert {
+
+    /**
+     * @desc   : 转换vo为pojo
+     * @author : admin
+     * @date   : 2023/1/9 10:37
+     */
+    StaffRight convertToPo(StaffRightVO staffRightVO);
+
+}

+ 44 - 42
src/main/java/com/dk/mdm/infrastructure/util/AuthUtils.java

@@ -3,13 +3,15 @@ package com.dk.mdm.infrastructure.util;
 import com.alibaba.fastjson.JSONObject;
 import com.dk.common.exception.BaseBusinessException;
 import com.dk.common.infrastructure.constant.Constant;
-import com.dk.common.model.vo.core.UserVO;
+import com.dk.common.model.vo.core.StaffEntity;
 import com.dk.common.response.ResponseCodeEnum;
 import com.dk.common.util.oauth.AESSecurityUtil;
 import com.dk.common.util.oauth.JwtUtil;
-import com.dk.mdm.infrastructure.convert.core.UserConvert;
-import com.dk.mdm.mapper.core.UserMapper;
-import com.dk.common.model.response.core.UserResponse;
+import com.dk.mdm.infrastructure.convert.mst.StaffConvert;
+import com.dk.mdm.mapper.mst.StaffMapper;
+import com.dk.mdm.model.pojo.mst.Staff;
+import com.dk.mdm.model.response.mst.StaffResponse;
+import com.dk.mdm.service.mst.StaffService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -32,10 +34,10 @@ public class AuthUtils {
     private String AESKey;
 
     @Autowired
-    private UserMapper userMapper;
+    private StaffMapper staffMapper;
 
     @Autowired
-    private UserConvert userConvert;
+    private StaffConvert staffConvert;
 
     @Autowired
     private StringRedisTemplate stringRedisTemplate;
@@ -48,8 +50,8 @@ public class AuthUtils {
      * @author : 洪旭东
      * @date   : 2022-06-07 16:19
      */
-    public UserVO getUser(){
-        return getUser(httpServletRequest.getHeader("Authorization"));
+    public StaffEntity getStaff(){
+        return getStaff(httpServletRequest.getHeader("Authorization"));
     }
     /**
      * @date_time 2021-12-23 09:25
@@ -57,25 +59,27 @@ public class AuthUtils {
      * @description 通过token获取用户信息,如果redis中失效,重新查询
      * @return com.dongke.auth.pojo.User
      */
-    public UserVO getUser(String token){
+    public StaffEntity getStaff(String token){
         if (token==null) {
             return null;
         }
         try {
             String[] tokens = token.split(" ");
             String decrypt = AESSecurityUtil.decrypt(AESKey, tokens[1]);
-            Long userId = Long.valueOf(JwtUtil.getUserId(decrypt));
-            log.info("userId=>{}",userId);
+            String staffId = JwtUtil.getStaffId(decrypt);
+            log.info("staffId=>{}",staffId);
 
             String appCode = JwtUtil.getAppCode(decrypt);
-            log.info("appUuid=>{}",appCode);
-            String ftyCode =JwtUtil.getFtyCode(decrypt);
-            log.info("ftyCode=>{}",ftyCode);
-            String json = stringRedisTemplate.opsForValue().get(Constant.RedisConstant.REDIS_USER.getName() + ftyCode + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + appCode + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userId);
+            log.info("appCode=>{}",appCode);
+            String cpId = JwtUtil.getCpId(decrypt);
+            log.info("cpId=>{}",cpId);
+            String cpCode = JwtUtil.getCpCode(decrypt);
+            log.info("cpCode=>{}",cpCode);
+            String json = stringRedisTemplate.opsForValue().get(Constant.RedisConstant.REDIS_STAFF.getName() + cpId + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + appCode + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + staffId);
             if (json==null){
-                return saveUser(userId, appCode);
+                return saveStaff(staffId, cpCode, appCode);
             }else{
-                return JSONObject.parseObject(json, UserVO.class);
+                return JSONObject.parseObject(json, StaffEntity.class);
             }
         } catch (Exception e) {
             log.error(e.toString(),e);
@@ -87,25 +91,25 @@ public class AuthUtils {
      * @author : 周兴
      * @date   : 2023/1/6 15:46
      */
-    public void cleanUser(){
+    public void cleanStaff(){
         String appCode = JwtUtil.getAppCode(httpServletRequest);
-        cleanUser(Constant.RedisConstant.REDIS_USER.getName() + appCode + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + getUser().getUserId());
+        cleanStaff(Constant.RedisConstant.REDIS_STAFF.getName() + appCode + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + getStaff().getStaffId());
     }
     /**
      * @desc   : 清除redis用户信息
      * @author : 周兴
      * @date   : 2023/1/6 15:46
      */
-    public void cleanUser(Long userId){
+    public void cleanStaff(Long userId){
         String appCode = JwtUtil.getAppCode(httpServletRequest);
-        stringRedisTemplate.delete(Constant.RedisConstant.REDIS_USER.getName() + appCode + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userId);
+        stringRedisTemplate.delete(Constant.RedisConstant.REDIS_STAFF.getName() + appCode + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userId);
     }
     /**
      * @desc   : 清除redis用户信息
      * @author : 周兴
      * @date   : 2023/1/6 15:46
      */
-    public void cleanUser(String key){
+    public void cleanStaff(String key){
         stringRedisTemplate.delete(key);
     }
     /**
@@ -113,16 +117,16 @@ public class AuthUtils {
      * @author : 周兴
      * @date   : 2023/1/5 13:08
      */
-    public void cleanLoginUser(){
-        UserVO userVo = getUser();
-        cleanLoginUser(Constant.RedisConstant.REDIS_LOGIN.getName() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getUserCode());
+    public void cleanLoginStaff(){
+        StaffEntity staffEntity = getStaff();
+        cleanLoginStaff(Constant.RedisConstant.REDIS_LOGIN.getName() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + staffEntity.getStaffCode());
     }
     /**
      * @desc   : 清除缓存
      * @author : 周兴
      * @date   : 2023/1/5 13:09
      */
-    public void cleanLoginUser(String key){
+    public void cleanLoginStaff(String key){
         stringRedisTemplate.delete(key);
     }
     /**
@@ -131,28 +135,26 @@ public class AuthUtils {
      * @description 保存用户信息 + 权限ID 到Redis
      * @return User
      */
-    public UserVO saveUser(Long userId, String appCode){
-        UserResponse user = userMapper.selectById(userId);
-        UserVO userVO = userConvert.convertToVo(user);
-        if (user!=null) {
-            userVO.setAppCode(appCode);
-            saveUser(userVO);
+    public StaffEntity saveStaff(String staffId, String cpCode, String appCode){
+        StaffResponse staff = staffMapper.selectById(staffId);
+        StaffEntity staffEntity = staffConvert.convertToEntity(staff);
+        if (staffEntity!=null) {
+            staffEntity.setAppCode(appCode);
+            staffEntity.setCpCode(cpCode);
+            saveStaff(staffEntity);
         }
-        return userVO;
+        return staffEntity;
     }
     /**
-     * @desc   : 保存用户
+     * @desc   : 保存员工
      * @author : 周兴
      * @date   : 2023/1/6 15:18
      */
-    public UserVO saveUser(UserVO user){
-        user.setUserPwd(null);
-        if (user!=null) {
-//            List<String> list = functionService.selectNameByUser(user.getUserId());
-//            user.setFunNameList(list);
-            stringRedisTemplate.opsForValue().set(Constant.RedisConstant.REDIS_USER.getName() + user.getFtyCode() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName()
-                    + user.getAppCode() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + user.getUserCode(), JSONObject.toJSONString(user), 1, TimeUnit.HOURS);
+    public StaffEntity saveStaff(StaffEntity staff){
+        if (staff!=null) {
+            stringRedisTemplate.opsForValue().set(Constant.RedisConstant.REDIS_STAFF.getName() + staff.getCpId() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName()
+                    + staff.getAppCode() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + staff.getStaffCode(), JSONObject.toJSONString(staff), 1, TimeUnit.HOURS);
         }
-        return user;
+        return staff;
     }
 }

+ 1 - 1
src/main/java/com/dk/mdm/mapper/common/CommonMapper.xml

@@ -4,7 +4,7 @@
 
     <!-- 获取显示顺序的最大值 -->
     <select id="getMaxDisplayNo" resultType="Integer">
-        select max(display_no)
+        select max(display_no) + 1
         from ${table}
         where flg_valid
         <if test="ftyId != null">

+ 16 - 0
src/main/java/com/dk/mdm/mapper/mst/StaffMapper.java

@@ -4,6 +4,7 @@ import com.dk.mdm.model.pojo.mst.Staff;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.query.mst.StaffQuery;
 import com.dk.mdm.model.response.mst.StaffResponse;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -28,5 +29,20 @@ public interface StaffMapper extends BaseMapper<Staff>{
      * @date   : 2023/1/9 10:42
      */
     Long countByCond(StaffQuery staffQuery);
+
+    /**
+     * @desc   : 根据userId获取当前企业的员工信息
+     * @author : 周兴
+     * @date   : 2024/3/6 10:42
+     */
+    StaffResponse selectByUserId(@Param("userId") String userId);
+
+    /**
+     * @desc   : 根据staffId获取当前企业的员工信息
+     * @author : 周兴
+     * @date   : 2024/3/6 10:42
+     */
+    StaffResponse selectById(@Param("staffId") String staffId);
+
 }
 

+ 14 - 0
src/main/java/com/dk/mdm/mapper/mst/StaffMapper.xml

@@ -124,6 +124,20 @@
         WHERE t.staff_id = #{staffId}::uuid
     </select>
 
+    <!-- 根据用户Id查询表t_mst_staff的一行数据 -->
+    <select id="selectByUserId" resultMap="BaseResultMap">
+        SELECT
+        <include refid="Base_Column_List"/>
+        , org.org_name,
+        case when t.hr_status = 1 then '在职' else '离职' end as  hr_status_name,
+        (SELECT  COALESCE(array_to_string(array_agg(role_name), ','),'')
+        FROM dkic_b.t_mst_role
+        WHERE role_id = ANY (t.role_ids)) AS role_names
+        FROM dkic_b.t_mst_staff t
+        LEFT JOIN dkic_b.t_mst_org org ON t.org_Id = org.org_Id
+        WHERE t.wx_user_id = #{userId}::uuid
+    </select>
+
     <insert id="insertBatch">
         insert into dkic_b.t_mst_staff
         (

+ 50 - 18
src/main/java/com/dk/mdm/mapper/sale/OrderItemMapper.xml

@@ -10,7 +10,39 @@
     </sql>
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.dk.mdm.model.response.sale.OrderItemResponse">
+    <resultMap id="BaseResultMap" type="com.dk.mdm.model.pojo.sale.OrderItem">
+        <id column="item_id" property="itemId"/>
+                <result column="order_id" property="orderId" typeHandler="UuidTypeHandler"/>
+                <result column="item_index" property="itemIndex"/>
+                <result column="sku_id" property="skuId" typeHandler="UuidTypeHandler"/>
+                <result column="item_qty" property="itemQty"/>
+                <result column="price_std" property="priceStd"/>
+                <result column="amt_std" property="amtStd"/>
+                <result column="price_sale" property="priceSale"/>
+                <result column="item_amt" property="itemAmt"/>
+                <result column="price_discount" property="priceDiscount"/>
+                <result column="non_std_code" property="nonStdCode"/>
+                <result column="out_status" property="outStatus"/>
+                <result column="outing_qty" property="outingQty"/>
+                <result column="outing_amt" property="outingAmt"/>
+                <result column="out_qty" property="outQty"/>
+                <result column="out_amt" property="outAmt"/>
+                <result column="return_qty" property="returnQty"/>
+                <result column="return_amt" property="returnAmt"/>
+                <result column="remarks" property="remarks"/>
+                <result column="flg_valid" property="flgValid"/>
+                <result column="cp_id" property="cpId"/>
+            <result column="op_create_time" property="opCreateTime" typeHandler="TimestampTypeHandler"/>
+                <result column="op_create_user_id" property="opCreateUserId" typeHandler="UuidTypeHandler"/>
+            <result column="op_update_time" property="opUpdateTime" typeHandler="TimestampTypeHandler"/>
+                <result column="op_update_user_id" property="opUpdateUserId" typeHandler="UuidTypeHandler"/>
+                <result column="op_app_code" property="opAppCode"/>
+            <result column="op_timestamp" property="opTimestamp" typeHandler="TimestampTypeHandler"/>
+                <result column="op_db_user" property="opDbUser"/>
+    </resultMap>
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMapResponse" type="com.dk.mdm.model.response.sale.OrderItemResponse">
         <id column="item_id" property="itemId"/>
                 <result column="order_id" property="orderId" typeHandler="UuidTypeHandler"/>
                 <result column="item_index" property="itemIndex"/>
@@ -116,7 +148,7 @@
     </sql>
 
     <!-- 查询表t_psi_order_item,(条件查询+分页)列表 -->
-    <select id="selectByCond" resultMap="BaseResultMap">
+    <select id="selectByCond" resultMap="BaseResultMapResponse">
         SELECT tpoi.item_id,
                tpoi.order_id,
                tpoi.item_index,
@@ -244,26 +276,26 @@
     </delete>
 
     <!-- 根据条件进行查询(出库用) -->
-    <select id="selectByCondForOut" resultMap="BaseResultMap">
-        SELECT tpoi.item_id,
-               tpoi.order_id,
+    <select id="selectByCondForOut" resultMap="BaseResultMapResponse">
+        SELECT tpoi.item_id                                        as "fromItemId",
+               tpoi.order_id                                       as "fromId",
                tpoi.item_index,
                tpoi.sku_id,
-               tmgs.sku_code                                      as "skuCode",
-               tmgs.sku_model                                     as "skuModel",
-               tmgs.sku_name                                      as "skuName",
-               tpoi.item_qty                                      as "orderQty",
-               tpoi.item_qty - tpoi.outing_qty                    as "canOutingQty",
-               tpoi.item_qty - tpoi.outing_qty                    as outing_qty,
-               tpoi.price_std * (tpoi.item_qty - tpoi.outing_qty) as item_amt,
-               tpoi.price_sale as "price_out",
+               tmgs.sku_code                                       as "skuCode",
+               tmgs.sku_model                                      as "skuModel",
+               tmgs.sku_name                                       as "skuName",
+               tpoi.item_qty                                       as "orderQty",
+               tpoi.item_qty - tpoi.outing_qty                     as "canOutingQty",
+               tpoi.item_qty - tpoi.outing_qty                     as outing_qty,
+               tpoi.price_sale                                     as "priceOut",
+               tpoi.price_sale * (tpoi.item_qty - tpoi.outing_qty) as outing_amt,
                tpoi.non_std_code,
                tpoi.remarks,
-               tpi.inv_id                                         as "invId",
-               tpi.wh_id                                          as "whId",
-               tpi.inv_qty                                        as "invQty",
-               tpi.usable_qty                                     as "usableQty",
-               tmw.wh_name                                        as "whName"
+               tpi.inv_id                                          as "invId",
+               tpi.wh_id                                           as "whId",
+               tpi.inv_qty                                         as "invQty",
+               tpi.usable_qty                                      as "usableQty",
+               tmw.wh_name                                         as "whName"
         FROM dkic_b.t_psi_order_item as tpoi
                  inner join dkic_b.t_mst_goods_sku tmgs on tpoi.sku_id = tmgs.sku_id
                  left join dkic_b.t_psi_inventory as tpi

+ 11 - 2
src/main/java/com/dk/mdm/model/response/mst/StaffResponse.java

@@ -129,6 +129,13 @@ public class StaffResponse extends PageInfo<StaffResponse> implements Serializab
     private Integer cpId;
 
     /**
+     * 企业编码
+     */
+    @Excel(name = "企业编码")
+    @ApiModelProperty(value = "企业编码")
+    private String cpCode;
+
+    /**
      * 登录标识1能登录 0不能登录
      */
     @Excel(name = "登录标识")
@@ -156,7 +163,8 @@ public class StaffResponse extends PageInfo<StaffResponse> implements Serializab
      */
     @Excel(name = "创建用户 (触发器自动处理)")
     @ApiModelProperty(value = "创建用户 (触发器自动处理)")
-    private Long opCreateUserId;
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opCreateUserId;
 
 
     /**
@@ -174,7 +182,8 @@ public class StaffResponse extends PageInfo<StaffResponse> implements Serializab
      */
     @Excel(name = "修改用户 (触发器自动处理)")
     @ApiModelProperty(value = "修改用户 (触发器自动处理)")
-    private Long opUpdateUserId;
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opUpdateUserId;
 
 
     /**

+ 9 - 0
src/main/java/com/dk/mdm/model/response/sale/OrderItemResponse.java

@@ -273,6 +273,12 @@ public class OrderItemResponse extends PageInfo<OrderItemResponse> implements Se
     @ApiModelProperty(value = "数据操作数据库用户 (触发器自动处理)")
     private String opDbUser;
 
+    @ApiModelProperty(value = "来源单明细ID")
+    private String fromItemId;
+
+    @ApiModelProperty(value = "来源单ID")
+    private String fromId;
+
     @ApiModelProperty(value = "商品编码")
     private String skuCode;
 
@@ -288,6 +294,9 @@ public class OrderItemResponse extends PageInfo<OrderItemResponse> implements Se
     @ApiModelProperty(value = "可出库数量")
     private BigDecimal canOutingQty;
 
+    @ApiModelProperty(value = "出库价")
+    private BigDecimal priceOut;
+
     @ApiModelProperty(value = "库存ID")
     private String invId;
 

+ 62 - 20
src/main/java/com/dk/mdm/service/common/CommonService.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.dk.common.infrastructure.constant.Constant;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.common.model.pojo.PageList;
+import com.dk.common.model.vo.core.StaffEntity;
 import com.dk.common.model.vo.core.UserVO;
 import com.dk.common.response.ResponseCodeEnum;
 import com.dk.common.response.ResponseResultUtil;
@@ -12,10 +13,13 @@ import com.dk.common.response.ResponseResultVO;
 import com.dk.common.service.BaseService;
 import com.dk.mdm.mapper.common.CommonMapper;
 import com.dk.mdm.infrastructure.util.AuthUtils;
+import com.dk.mdm.mapper.mst.StaffMapper;
+import com.dk.mdm.model.response.mst.StaffResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.postgresql.util.PGobject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
@@ -38,6 +42,9 @@ public class CommonService extends BaseService<Map<String, Object>> {
     private CommonMapper commonMapper;
 
     @Autowired
+    private StaffMapper staffMapper;
+
+    @Autowired
     private AuthUtils authUtils;
 
     /**
@@ -48,8 +55,9 @@ public class CommonService extends BaseService<Map<String, Object>> {
     public Map<String, Object> getUniqueNoteCode(String docName, Boolean codeFlag) {
         Map<String, Object> param = new HashMap<>();
         param.put("docName", docName);
-        // TODO 公司Id
-        param.put("cpId", 1);
+        // 公司Id
+        StaffEntity staff = authUtils.getStaff();
+        param.put("cpId", staff.getCpId());
         Map<String, Object> map = null;
         // 获取系统基础数据
         if (codeFlag) {
@@ -65,11 +73,25 @@ public class CommonService extends BaseService<Map<String, Object>> {
      * @author : 周兴
      * @date : 2024/3/4 11:41
      */
+    @Transactional(
+            rollbackFor = {Exception.class}
+    )
     public ResponseResultVO<Map<String, List<Map<String, Object>>>> getInfoAfterLogin(Map<String, Object> param) {
+        // 先根据userId查询当前企业的员工信息
+        StaffResponse staff = staffMapper.selectByUserId(param.get("userId").toString());
+        if (staff != null) {
+            // 存Redis
+            authUtils.saveStaff(new StaffEntity().setStaffId(staff.getStaffId())
+                    .setStaffCode(staff.getStaffCode())
+                    .setStaffName(staff.getStaffName())
+                    .setCpCode(param.get("cpCode").toString())
+                    .setCpId(Integer.parseInt(param.get("cpId").toString()))
+                    .setAppCode(param.get("appCode").toString()));
+        }
         // 获取菜单
         List<Map<String, Object>> menuList = commonMapper.getMenuByUser(param);
         Map<String, List<Map<String, Object>>> map = new HashMap<>();
-        map.put("menuList",menuList);
+        map.put("menuList", menuList);
         return ResponseResultUtil.success(map);
     }
 
@@ -90,19 +112,42 @@ public class CommonService extends BaseService<Map<String, Object>> {
      * @date : 2023/5/11 10:19
      */
     public ResponseResultVO refreshBasicData(Map<String, Object> param) {
-        UserVO user = authUtils.getUser();
-        if (param.get("appCode") != null) {
-            user.setAppCode(param.get("appCode").toString());
+        return null;
+//        UserVO user = authUtils.getUser();
+//        if (param.get("appCode") != null) {
+//            user.setAppCode(param.get("appCode").toString());
+//        }
+//        Map userMap = new HashMap();
+//        userMap.put("userId", user.getUserId());
+//        userMap.put("appCode", user.getAppCode());
+//        return ResponseResultUtil.success(new HashMap<String, Object>(3) {{
+//            put("menu", commonMapper.getMenuByUser(user.getAppCode(), user.getUserId()));
+//            put("function", (user.getRoleIds() != null && user.getRoleIds().indexOf(-1) >= 0)
+//                    ? commonMapper.getUserFunctionAdmin(userMap) : commonMapper.getUserFunction(userMap));
+//            put("userTableSetting", commonMapper.getUserTableInfo(userMap));
+//        }});
+    }
+
+    /**
+     * @desc : 获取序号最大值
+     * @author : 周兴
+     * @date : 2023/1/6 11:41t_user_right
+     */
+    public Integer getMaxDisplayNo(Constant.DisplayNoTable displayNoTable, Map<String, Object> param) {
+        if (param == null) {
+            param = new HashMap<>();
+        }
+        param.put("cpId", authUtils.getStaff().getCpId());
+        String table = displayNoTable.getTable();
+        String mode = displayNoTable.getMode();
+        if (table != null && mode != null) {
+            table = mode + "." + table;
+            param.put("table", table);
+            // 获取最大序号
+            Integer maxDisplayNo = commonMapper.getMaxDisplayNo(param);
+            return maxDisplayNo == null ? 1 : maxDisplayNo;
         }
-        Map userMap = new HashMap();
-        userMap.put("userId", user.getUserId());
-        userMap.put("appCode", user.getAppCode());
-        return ResponseResultUtil.success(new HashMap<String, Object>(3) {{
-            put("menu", commonMapper.getMenuByUser(user.getAppCode(), user.getUserId()));
-            put("function", (user.getRoleIds() != null && user.getRoleIds().indexOf(-1) >= 0)
-                    ? commonMapper.getUserFunctionAdmin(userMap) : commonMapper.getUserFunction(userMap));
-            put("userTableSetting", commonMapper.getUserTableInfo(userMap));
-        }});
+        return 0;
     }
 
     /**
@@ -110,11 +155,8 @@ public class CommonService extends BaseService<Map<String, Object>> {
      * @author : 周兴
      * @date : 2023/1/6 11:41t_user_right
      */
-    public ResponseResultVO<Integer> getMaxDisplayNo(Map<String, Object> param) {
-        // 获取系统基础数据
-        Integer maxDisplayNo = commonMapper.getMaxDisplayNo(param);
-        maxDisplayNo = maxDisplayNo == null ? 1 : (maxDisplayNo + 1);
-        return ResponseResultUtil.success(maxDisplayNo);
+    public Integer getMaxDisplayNo(Constant.DisplayNoTable displayNoTable) {
+        return getMaxDisplayNo(displayNoTable, null);
     }
 
     /**

+ 166 - 160
src/main/java/com/dk/mdm/service/core/UserService.java

@@ -9,6 +9,7 @@ import com.dk.common.infrastructure.enums.ErrorCodeEnum;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.common.mapper.opinfo.OpInfoMapper;
 import com.dk.common.model.pojo.PageList;
+import com.dk.common.model.vo.core.StaffEntity;
 import com.dk.common.model.vo.core.UserVO;
 import com.dk.common.response.ResponseCodeEnum;
 import com.dk.common.response.ResponseResultUtil;
@@ -110,101 +111,102 @@ public class UserService extends BaseService<User> {
             rollbackFor = {Exception.class}
     )
     public ResponseResultVO login(UserVO userVo) {
-        // 校验应用
-        ResponseResultVO appVO = checkApp(userVo);
-        if (appVO != null) {
-            return appVO;
-        }
-        UserResponse user;
-        // TODO CR 220516 登录时没有redis,登录后验证或api用户获取token时,才需要验证redis
-        // 2022-05-21 周兴 暂时保留
-
-        //在缓存中查询登录的用户信息
-        //如果缓存中不存在当前登录的用户信息
-        // TODO CR 220516 redis还要加上app_uuid?共用token?token作为redis的key
-        // 2022-05-21 周兴 redis key 修改为 USER-{token}-{userid}
-
-        // 判断工厂编码是否存在
-        Long count = factoryMapper.selectByCode(new Factory().setFtyCode(userVo.getFtyCode()));
-        if (count <= 0) {
-            stringRedisTemplate.opsForValue().set(Constant.RedisConstant.REDIS_LOGIN.getName() + userVo.getFtyCode() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getAppCode()
-                    + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getUserCode(), "null", 30, TimeUnit.SECONDS);
-            return ResponseResultUtil.error(ErrorCodeEnum.FTY_ERROR.getCode(), ErrorCodeEnum.FTY_ERROR.getMessage());
-        }
-        //根据用户编码查询数据库中的用户信息
-        user = userMapper.selectByCode(userVo.getUserCode(), userVo.getFtyCode());
-        //查询不到用户信息,在缓存中将此用户信息设置为空,过期时间为30秒(在此期间不会访问数据库)
-        if (user == null) {
-            stringRedisTemplate.opsForValue().set(Constant.RedisConstant.REDIS_LOGIN.getName() + userVo.getFtyCode() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getAppCode()
-                    + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getUserCode(), "null", 30, TimeUnit.SECONDS);
-            return ResponseResultUtil.error(ErrorCodeEnum.USER_PASSWORD_ERROR.getCode(), ErrorCodeEnum.USER_PASSWORD_ERROR.getMessage());
-        }
-        user.setAppCode(userVo.getAppCode());
-        user.setFtyCode(userVo.getFtyCode());
-//        // 统一查询系统参数 TODO
-//        List<String> codes = new ArrayList<String>() {{
-//            add(Constant.StringConstant.SYS_CODE_002.getName());
-//            add(Constant.StringConstant.SYS_CODE_003.getName());
-//            add(Constant.StringConstant.SYS_CODE_010.getName());
-//        }};
-//        JSONObject settingValues = getSetting(codes, user.getCpId());
+        return null;
+//        // 校验应用
+//        ResponseResultVO appVO = checkApp(userVo);
+//        if (appVO != null) {
+//            return appVO;
+//        }
+//        UserResponse user;
+//        // TODO CR 220516 登录时没有redis,登录后验证或api用户获取token时,才需要验证redis
+//        // 2022-05-21 周兴 暂时保留
 //
-//        // 系统参数中错误次数
-//        int times = settingValues.getInteger(Constant.StringConstant.SYS_CODE_002.getName());
-//        // 系统参数中锁定时长
-//        int lockHours = settingValues.getInteger(Constant.StringConstant.SYS_CODE_003.getName());
-//        // 密码有效期
-//        String pwdValidDate = settingValues.getString(Constant.StringConstant.SYS_CODE_010.getName());
-        // 查询用户锁定状态
-        UserLocked userLocked = userLockedMapper.selectById(user.getUserId());
-        if (userLocked == null) {
-            userLocked = new UserLocked().setUserId(user.getUserId()).setIsLocked(false).setMissCount(0);
-            //保存
-            userLockedMapper.insert(userLocked);
-        }
-        //查询登录状态
-        if (userLocked.getIsLocked()) {
-            //锁定中
-            // TODO CR 220516 锁定时间+系统参数锁定时长<当前时间才解锁,1、时间不对,2、判断方向返了
-            // 2022-05-21 周兴 已修改 TODO
-            Integer lockHours = 3;
-            // 锁定时间 + 系统参数中锁定时间 < 当前时间 解锁
-            if (userLocked.getLockedTime().plusHours(lockHours).compareTo(LocalDateTime.now()) < 0) {
-            } else {
-                return ResponseResultUtil.error(ErrorCodeEnum.USER_IS_LOCKED.getCode(), ErrorCodeEnum.USER_IS_LOCKED.getMessage());
-            }
-        }
-        if (userMapper.encodePassword(userVo.getUserPwd(), user.getUserId()).equals(user.getUserPwd())) {
-            //密码正确
-            //清除锁定信息
-            userLockedMapper.unLockUser(user.getUserId());
-            //查询到用户信息后将数据放到缓存中,缓存过期时间为30分钟
-            stringRedisTemplate.opsForValue().set(Constant.RedisConstant.REDIS_LOGIN.getName() + userVo.getFtyCode() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getAppCode()
-                    + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getUserCode(), "null", 30, TimeUnit.SECONDS);
-        } else {
-            //密码错误
-            // 增加锁定次数
-            userLockedMapper.addMissCount(user.getUserId());
-            // 获取系统参数默认密码
-            Map<String, Object> param = new HashMap<>();
-            param.put("code", Constant.StringConstant.SYS_CODE_002.getName());
-            param.put("ftyId", user.getFtyId());
-            String sysValue = commonMapper.getSettingValue(param);
-            Integer times = Integer.parseInt(sysValue);
-            // 判断是否需要锁定用户
-            int returnRows = 0;
-            if (times != 0 && userLocked.getMissCount() + 1 > times) {
-                returnRows = userLockedMapper.lockUser(user.getUserId());
-            }
-            //清理redis
-            authUtils.cleanLoginUser(Constant.RedisConstant.REDIS_LOGIN.getName() + userVo.getFtyCode() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getAppCode()
-                    + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getUserCode());
-            return returnRows == 0 ? ResponseResultUtil.error(ErrorCodeEnum.USER_PASSWORD_ERROR.getCode(), ErrorCodeEnum.USER_PASSWORD_ERROR.getMessage())
-                    : ResponseResultUtil.error(ErrorCodeEnum.USER_IS_LOCKED.getCode(), ErrorCodeEnum.USER_IS_LOCKED.getMessage());
-        }
-        return ResponseResultUtil.success(new JSONObject() {{
-            put("user", user);
-        }});
+//        //在缓存中查询登录的用户信息
+//        //如果缓存中不存在当前登录的用户信息
+//        // TODO CR 220516 redis还要加上app_uuid?共用token?token作为redis的key
+//        // 2022-05-21 周兴 redis key 修改为 USER-{token}-{userid}
+//
+//        // 判断工厂编码是否存在
+//        Long count = factoryMapper.selectByCode(new Factory().setFtyCode(userVo.getFtyCode()));
+//        if (count <= 0) {
+//            stringRedisTemplate.opsForValue().set(Constant.RedisConstant.REDIS_LOGIN.getName() + userVo.getFtyCode() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getAppCode()
+//                    + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getUserCode(), "null", 30, TimeUnit.SECONDS);
+//            return ResponseResultUtil.error(ErrorCodeEnum.FTY_ERROR.getCode(), ErrorCodeEnum.FTY_ERROR.getMessage());
+//        }
+//        //根据用户编码查询数据库中的用户信息
+//        user = userMapper.selectByCode(userVo.getUserCode(), userVo.getFtyCode());
+//        //查询不到用户信息,在缓存中将此用户信息设置为空,过期时间为30秒(在此期间不会访问数据库)
+//        if (user == null) {
+//            stringRedisTemplate.opsForValue().set(Constant.RedisConstant.REDIS_LOGIN.getName() + userVo.getFtyCode() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getAppCode()
+//                    + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getUserCode(), "null", 30, TimeUnit.SECONDS);
+//            return ResponseResultUtil.error(ErrorCodeEnum.USER_PASSWORD_ERROR.getCode(), ErrorCodeEnum.USER_PASSWORD_ERROR.getMessage());
+//        }
+//        user.setAppCode(userVo.getAppCode());
+//        user.setFtyCode(userVo.getFtyCode());
+////        // 统一查询系统参数 TODO
+////        List<String> codes = new ArrayList<String>() {{
+////            add(Constant.StringConstant.SYS_CODE_002.getName());
+////            add(Constant.StringConstant.SYS_CODE_003.getName());
+////            add(Constant.StringConstant.SYS_CODE_010.getName());
+////        }};
+////        JSONObject settingValues = getSetting(codes, user.getCpId());
+////
+////        // 系统参数中错误次数
+////        int times = settingValues.getInteger(Constant.StringConstant.SYS_CODE_002.getName());
+////        // 系统参数中锁定时长
+////        int lockHours = settingValues.getInteger(Constant.StringConstant.SYS_CODE_003.getName());
+////        // 密码有效期
+////        String pwdValidDate = settingValues.getString(Constant.StringConstant.SYS_CODE_010.getName());
+//        // 查询用户锁定状态
+//        UserLocked userLocked = userLockedMapper.selectById(user.getUserId());
+//        if (userLocked == null) {
+//            userLocked = new UserLocked().setUserId(user.getUserId()).setIsLocked(false).setMissCount(0);
+//            //保存
+//            userLockedMapper.insert(userLocked);
+//        }
+//        //查询登录状态
+//        if (userLocked.getIsLocked()) {
+//            //锁定中
+//            // TODO CR 220516 锁定时间+系统参数锁定时长<当前时间才解锁,1、时间不对,2、判断方向返了
+//            // 2022-05-21 周兴 已修改 TODO
+//            Integer lockHours = 3;
+//            // 锁定时间 + 系统参数中锁定时间 < 当前时间 解锁
+//            if (userLocked.getLockedTime().plusHours(lockHours).compareTo(LocalDateTime.now()) < 0) {
+//            } else {
+//                return ResponseResultUtil.error(ErrorCodeEnum.USER_IS_LOCKED.getCode(), ErrorCodeEnum.USER_IS_LOCKED.getMessage());
+//            }
+//        }
+//        if (userMapper.encodePassword(userVo.getUserPwd(), user.getUserId()).equals(user.getUserPwd())) {
+//            //密码正确
+//            //清除锁定信息
+//            userLockedMapper.unLockUser(user.getUserId());
+//            //查询到用户信息后将数据放到缓存中,缓存过期时间为30分钟
+//            stringRedisTemplate.opsForValue().set(Constant.RedisConstant.REDIS_LOGIN.getName() + userVo.getFtyCode() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getAppCode()
+//                    + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getUserCode(), "null", 30, TimeUnit.SECONDS);
+//        } else {
+//            //密码错误
+//            // 增加锁定次数
+//            userLockedMapper.addMissCount(user.getUserId());
+//            // 获取系统参数默认密码
+//            Map<String, Object> param = new HashMap<>();
+//            param.put("code", Constant.StringConstant.SYS_CODE_002.getName());
+//            param.put("ftyId", user.getFtyId());
+//            String sysValue = commonMapper.getSettingValue(param);
+//            Integer times = Integer.parseInt(sysValue);
+//            // 判断是否需要锁定用户
+//            int returnRows = 0;
+//            if (times != 0 && userLocked.getMissCount() + 1 > times) {
+//                returnRows = userLockedMapper.lockUser(user.getUserId());
+//            }
+//            //清理redis
+//            authUtils.cleanLoginUser(Constant.RedisConstant.REDIS_LOGIN.getName() + userVo.getFtyCode() + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getAppCode()
+//                    + Constant.StringConstant.SYSTEM_MAGIN_LINE.getName() + userVo.getUserCode());
+//            return returnRows == 0 ? ResponseResultUtil.error(ErrorCodeEnum.USER_PASSWORD_ERROR.getCode(), ErrorCodeEnum.USER_PASSWORD_ERROR.getMessage())
+//                    : ResponseResultUtil.error(ErrorCodeEnum.USER_IS_LOCKED.getCode(), ErrorCodeEnum.USER_IS_LOCKED.getMessage());
+//        }
+//        return ResponseResultUtil.success(new JSONObject() {{
+//            put("user", user);
+//        }});
     }
 
     /**
@@ -216,39 +218,40 @@ public class UserService extends BaseService<User> {
             rollbackFor = {Exception.class}
     )
     public ResponseResultVO loginAfterCheckPassword(UserResponse user, String accessToken) {
-        // 存Redis
-        authUtils.saveUser(new UserVO().setUserId(user.getUserId()).setUserType(user.getUserType()).setUserCode(user.getUserCode())
-                .setUserName(user.getUserName()).setClientId(user.getClientId()).setFtyId(user.getFtyId()).setOrgId(user.getOrgId())
-                .setStaffId(user.getStaffId()).setAppCode(user.getAppCode()).setFtyCode(user.getFtyCode()));
-        userMapper.updateUserLogin(
-                new UserVO().setUserId(user.getUserId())
-                        .setIsLogin(true).setTokenKey(accessToken)
-                        .setTokenInvalidTime(LocalDateTime.ofEpochSecond((System.currentTimeMillis() + OauthConstants.EXPIRES_IN) / 1000,
-                                0, ZoneOffset.ofHours(8)))
-        );
-        // 获取浏览器标识
-        UserAgent userAgent = UserAgent.parseUserAgentString(httpServletRequest.getHeader("User-Agent"));
-
-        //登录日志
-        userMapper.insertUserLoginLog(new UserLoginLog().setUserId(user.getUserId())
-                .setLoginType(Constant.IntegerConstant.LOG_LOGIN_LOGIN.getValue()).setClientIp(httpServletRequest.getRemoteAddr())
-                .setClientInfo(userAgent.toString()).setAppCode(user.getAppCode()));
-        opInfoMapper.setOpInfo(user.getAppCode(), String.valueOf(user.getUserId()), user.getLang());
-        // TODO 系统参数
-//        JSONObject settingValues = getSetting(codes, userVo.getCpId());
-        // 获取用户表格设置
-        Map userMap = new HashMap();
-        userMap.put("userId", user.getUserId());
-        userMap.put("appCode", user.getAppCode());
-
-        return ResponseResultUtil.success(new HashMap<String, Object>(16) {{
-            put("accessToken", accessToken);
-            put("user", user);
-            put("menu", commonMapper.getMenuByUser(user.getAppCode(), user.getUserId()));
-            put("function", (user.getRoleIds() != null && user.getRoleIds().indexOf(-1) >= 0)
-                    ? commonMapper.getUserFunctionAdmin(userMap) : commonMapper.getUserFunction(userMap));
-            put("userTableSetting", commonMapper.getUserTableInfo(userMap));
-        }});
+        return null;
+//        // 存Redis
+//        authUtils.saveUser(new UserVO().setUserId(user.getUserId()).setUserType(user.getUserType()).setUserCode(user.getUserCode())
+//                .setUserName(user.getUserName()).setClientId(user.getClientId()).setFtyId(user.getFtyId()).setOrgId(user.getOrgId())
+//                .setStaffId(user.getStaffId()).setAppCode(user.getAppCode()).setFtyCode(user.getFtyCode()));
+//        userMapper.updateUserLogin(
+//                new UserVO().setUserId(user.getUserId())
+//                        .setIsLogin(true).setTokenKey(accessToken)
+//                        .setTokenInvalidTime(LocalDateTime.ofEpochSecond((System.currentTimeMillis() + OauthConstants.EXPIRES_IN) / 1000,
+//                                0, ZoneOffset.ofHours(8)))
+//        );
+//        // 获取浏览器标识
+//        UserAgent userAgent = UserAgent.parseUserAgentString(httpServletRequest.getHeader("User-Agent"));
+//
+//        //登录日志
+//        userMapper.insertUserLoginLog(new UserLoginLog().setUserId(user.getUserId())
+//                .setLoginType(Constant.IntegerConstant.LOG_LOGIN_LOGIN.getValue()).setClientIp(httpServletRequest.getRemoteAddr())
+//                .setClientInfo(userAgent.toString()).setAppCode(user.getAppCode()));
+//        opInfoMapper.setOpInfo(user.getAppCode(), String.valueOf(user.getUserId()), user.getLang());
+//        // TODO 系统参数
+////        JSONObject settingValues = getSetting(codes, userVo.getCpId());
+//        // 获取用户表格设置
+//        Map userMap = new HashMap();
+//        userMap.put("userId", user.getUserId());
+//        userMap.put("appCode", user.getAppCode());
+//
+//        return ResponseResultUtil.success(new HashMap<String, Object>(16) {{
+//            put("accessToken", accessToken);
+//            put("user", user);
+//            put("menu", commonMapper.getMenuByUser(user.getAppCode(), user.getUserId()));
+//            put("function", (user.getRoleIds() != null && user.getRoleIds().indexOf(-1) >= 0)
+//                    ? commonMapper.getUserFunctionAdmin(userMap) : commonMapper.getUserFunction(userMap));
+//            put("userTableSetting", commonMapper.getUserTableInfo(userMap));
+//        }});
     }
 
     /**
@@ -262,21 +265,22 @@ public class UserService extends BaseService<User> {
     public ResponseResultVO logout() {
         // 获取浏览器标识
         UserAgent userAgent = UserAgent.parseUserAgentString(httpServletRequest.getHeader("User-Agent"));
-        UserVO u = authUtils.getUser();
+        StaffEntity staff = authUtils.getStaff();
         String appCode = JwtUtil.getAppCode(httpServletRequest);
-        Integer userId = u.getUserId();
-        // 用户
-        User user = super.selectObjectById(userId.toString());
-        //修改登录状态
-        userMapper.updateUserLogin(
-                new UserVO().setUserId(userId).setAppCode(u.getAppCode()).setIsLogin(false));
-        //记录登录日志
-        userMapper.insertUserLoginLog(new UserLoginLog().setUserId(user.getUserId())
-                .setLoginType(Constant.IntegerConstant.LOG_LOGIN_LOGOUT.getValue()).setClientIp(httpServletRequest.getRemoteAddr())
-                .setClientInfo(userAgent.toString()).setAppCode(u.getAppCode()));
+        String staffId = staff.getStaffId();
+        // todo
+//        // 用户
+//        User user = super.selectObjectById(userId.toString());
+//        //修改登录状态
+//        userMapper.updateUserLogin(
+//                new UserVO().setUserId(userId).setAppCode(u.getAppCode()).setIsLogin(false));
+//        //记录登录日志
+//        userMapper.insertUserLoginLog(new UserLoginLog().setUserId(user.getUserId())
+//                .setLoginType(Constant.IntegerConstant.LOG_LOGIN_LOGOUT.getValue()).setClientIp(httpServletRequest.getRemoteAddr())
+//                .setClientInfo(userAgent.toString()).setAppCode(u.getAppCode()));
         //清理redis
-        authUtils.cleanUser();
-        authUtils.cleanLoginUser();
+        authUtils.cleanStaff();
+        authUtils.cleanLoginStaff();
         return ResponseResultUtil.success();
     }
 
@@ -308,26 +312,28 @@ public class UserService extends BaseService<User> {
             rollbackFor = {Exception.class}
     )
     public ResponseResultVO updatePassword(UserVO userVO) {
-        // 用户
-        UserVO userVo = authUtils.getUser();
-        // 查询当前用户信息
-        UserResponse user = userMapper.selectUserWithPwdById(userVo.getUserId());
-
-        if (!user.getUserPwd().equals(userMapper.encodePassword(userVO.getPassword(), userVo.getUserId()))) {
-            // 旧密码错误
-            return ResponseResultUtil.error(ErrorCodeEnum.USER_PWD_ERROR.getCode(), ErrorCodeEnum.USER_PWD_ERROR.getMessage());
-        } else if (!userVO.getNewPassword().equals(userVO.getConfirmPassword())) {
-            // 确认密码不一致
-            return ResponseResultUtil.error(ErrorCodeEnum.USER_PWD_NEW_AND_CONFIRM_DIFFERENT.getCode(),
-                    ErrorCodeEnum.USER_PWD_NEW_AND_CONFIRM_DIFFERENT.getMessage());
-        }
-        // 修改密码
-        userMapper.updatePassword(new UserVO()
-                .setUserId(userVo.getUserId())
-                .setPwdDate(LocalDateTime.now())
-                .setFlgInitPwd(Boolean.FALSE)
-                .setUserPwd(userMapper.encodePassword(userVO.getNewPassword(), userVo.getUserId())));
-        return ResponseResultUtil.success();
+        // todo
+        return null ;
+//        // 用户
+//        UserVO userVo = authUtils.getUser();
+//        // 查询当前用户信息
+//        UserResponse user = userMapper.selectUserWithPwdById(userVo.getUserId());
+//
+//        if (!user.getUserPwd().equals(userMapper.encodePassword(userVO.getPassword(), userVo.getUserId()))) {
+//            // 旧密码错误
+//            return ResponseResultUtil.error(ErrorCodeEnum.USER_PWD_ERROR.getCode(), ErrorCodeEnum.USER_PWD_ERROR.getMessage());
+//        } else if (!userVO.getNewPassword().equals(userVO.getConfirmPassword())) {
+//            // 确认密码不一致
+//            return ResponseResultUtil.error(ErrorCodeEnum.USER_PWD_NEW_AND_CONFIRM_DIFFERENT.getCode(),
+//                    ErrorCodeEnum.USER_PWD_NEW_AND_CONFIRM_DIFFERENT.getMessage());
+//        }
+//        // 修改密码
+//        userMapper.updatePassword(new UserVO()
+//                .setUserId(userVo.getUserId())
+//                .setPwdDate(LocalDateTime.now())
+//                .setFlgInitPwd(Boolean.FALSE)
+//                .setUserPwd(userMapper.encodePassword(userVO.getNewPassword(), userVo.getUserId())));
+//        return ResponseResultUtil.success();
     }
     // endregion
 

+ 20 - 0
src/main/java/com/dk/mdm/service/ivt/OutboundService.java

@@ -10,17 +10,20 @@ import com.dk.common.response.ResponseResultVO;
 import com.dk.mdm.infrastructure.convert.ivt.OutboundConvert;
 import com.dk.mdm.infrastructure.convert.ivt.OutboundItemConvert;
 import com.dk.mdm.mapper.ivt.OutboundItemMapper;
+import com.dk.mdm.mapper.sale.OrderItemMapper;
 import com.dk.mdm.model.pojo.ivt.Outbound;
 import com.dk.mdm.mapper.ivt.OutboundMapper;
 import com.dk.common.service.BaseService;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.pojo.ivt.OutboundItem;
+import com.dk.mdm.model.pojo.sale.OrderItem;
 import com.dk.mdm.model.query.ivt.OutboundItemQuery;
 import com.dk.mdm.model.response.ivt.OutboundItemResponse;
 import com.dk.mdm.model.response.ivt.OutboundResponse;
 import com.dk.mdm.model.vo.ivt.OutboundItemVO;
 import com.dk.mdm.model.vo.ivt.OutboundVO;
 import com.dk.mdm.service.common.CommonService;
+import com.dk.mdm.service.sale.OrderItemService;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -55,6 +58,12 @@ public class OutboundService extends BaseService<Outbound> {
 	private OutboundItemMapper outboundItemMapper;
 
 	@Autowired
+	private OrderItemService orderItemService;
+
+	@Autowired
+	private OrderItemMapper orderItemMapper;
+
+	@Autowired
 	private CommonService commonService;
 
 	@Autowired
@@ -89,6 +98,17 @@ public class OutboundService extends BaseService<Outbound> {
 				outboundItem.setOutId(outbound.getOutId()).setCpId(outbound.getCpId()).setOutStatus(Constant.OutStatus.CHUKUZHONG.getName())
 					.setOutType(Constant.OutType.SALE.getName());
 				outboundItemMapper.insert(outboundItem);
+
+				// 反写订单出库中数量
+				OrderItem orderItem = orderItemMapper.selectById(outboundItem.getFromItemId());
+				// 如果商品数量小于订单+本次出库单上的出库中数量
+				if(orderItem.getItemQty().compareTo(orderItem.getOutingQty().add(outboundItem.getOutingQty())) == -1){
+					throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ITEMQTY_NO_LESS_OUTQTY.getMessage());
+				}else{
+					OrderItem orderItemUpdate = new OrderItem();
+					orderItemUpdate.setOutingQty(orderItem.getOutingQty().add(outboundItem.getOutingQty())).setItemId(orderItem.getItemId());
+					orderItemService.updateByUuid(orderItemUpdate);
+				}
 			}
 		}
 		return ResponseResultUtil.success();

+ 3 - 7
src/main/java/com/dk/mdm/service/mst/MoneyAccountService.java

@@ -93,15 +93,11 @@ public class MoneyAccountService extends BaseService<MoneyAccount> {
 	public ResponseResultVO<?> insert(MoneyAccountVO moneyAccountVO) {
 		// 转化实体
 		MoneyAccount moneyAccount = moneyAccountConvert.convertToPo(moneyAccountVO);
-		Integer displayNo = moneyAccountMapper.selectDisplayNo(new MoneyAccountQuery());
-		if (displayNo != null) {
-			//插入序号
-			moneyAccount.setDisplayNo(displayNo);
-		} else {
-			moneyAccount.setDisplayNo(0);
-		}
+		// 获取显示顺序
+		Integer displayNo = commonService.getMaxDisplayNo(Constant.DisplayNoTable.MONEYACCOUNT);
 		// 获取编码和主键UuId
 		Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.MONEYACCOUNT.getName(),true);
+		moneyAccount.setDisplayNo(displayNo);
 		moneyAccount.setMacId(codeMap.get("outId").toString());
 		moneyAccount.setMacCode(codeMap.get("outNote").toString());
 		return super.insert(moneyAccount);

+ 5 - 0
src/main/java/com/dk/mdm/service/mst/StaffService.java

@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.dk.common.infrastructure.annotaiton.Pagination;
 import com.dk.common.infrastructure.constant.Constant;
 import com.dk.common.model.pojo.PageList;
+import com.dk.common.model.vo.core.StaffEntity;
 import com.dk.common.response.ResponseCodeEnum;
 import com.dk.common.response.ResponseResultUtil;
 import com.dk.common.response.ResponseResultVO;
 import com.dk.mdm.infrastructure.convert.mst.StaffConvert;
+import com.dk.mdm.infrastructure.util.AuthUtils;
 import com.dk.mdm.model.pojo.mst.*;
 import com.dk.mdm.mapper.mst.StaffMapper;
 import com.dk.common.service.BaseService;
@@ -64,6 +66,9 @@ public class StaffService extends BaseService<Staff> {
     @Autowired
     private CommonService commonService;
 
+    @Autowired
+    private AuthUtils authUtils;
+
     /**
      * @desc : 条件查询
      * @author : 姜永辉

+ 7 - 7
src/main/java/com/dk/mdm/service/wxapi/basic/WechatPayService.java

@@ -38,25 +38,26 @@ public class WechatPayService {
     /**
      * 商户 下单选取旗舰版或专业版的订单
      *
-     * @param paymentSn
+     * @param param
      * @return
      * @throws WxPayException
      */
-    public ResponseResultVO createOrderMiniPlat(String paymentSn, String openId) throws WxPayException {
+    public ResponseResultVO unifiedOrder(Map<String, Object> param) throws WxPayException {
+        String paymentSn = param.get("paymentSn").toString();
+        String openId = param.get("openId").toString();
         try {
             // 获取单据的金额
-            BigDecimal payFee = BigDecimal.ONE;
-
-
+            String payFee = "0.01";
             WxPayService wxPayService = this.getWxPayService();
             WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
-            orderRequest.setBody("");
+            orderRequest.setBody("商品测试");
             orderRequest.setOutTradeNo(paymentSn);
             orderRequest.setTotalFee(BaseWxPayRequest.yuanToFen(payFee.toString()));//元转成分
             orderRequest.setOpenid(openId);
             orderRequest.setSpbillCreateIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
             orderRequest.setNotifyUrl(wechatPayConfigInfo.getWechatNotifyUrl() + "/" + wechatPayConfigInfo.getAppId());
             orderRequest.setTradeType("JSAPI");
+            // 生成预支付订单
             WxPayUnifiedOrderResult wxPayUnifiedOrderResult = wxPayService.unifiedOrder(orderRequest);
             String prepay_id = wxPayUnifiedOrderResult.getPrepayId();
             String timeStamp = new Date().getTime() + "";
@@ -82,7 +83,6 @@ public class WechatPayService {
         }
     }
 
-
     /**
      * @desc : 处理支付成功逻辑
      * @author : 姜永辉

+ 3 - 2
src/main/resources/dev/bootstrap.yml

@@ -112,13 +112,14 @@ wx:
   del_corp_tag: https://qyapi.weixin.qq.com/cgi-bin/externalcontact/del_corp_tag?access_token=
   # 支付的信息
   pay:
-    mchId: XXXXXXXXXXx
+    # 商户号 微信支付
+    mchId: 1669762764
     # 小程序的appid
     appId: wxe27c8f5249b7aeab
     # 小程序的appSecret
     appSecret: 9bd0efa102f148ff4ca09a1152310555
     # 支付密钥
-    mchKey: 9bd0efa102f148ff4ca09a1152310555
+    mchKey: 399e76d7db9511ee9c24fa163eacb119
     # 证书路径
     keyPath: /mnt/cert/2021/05/11/404727f0-e5be-424e-b009-59f1ec8d102e.p12
     # 小程序支付的回调接口地址