lsw 11 months ago
parent
commit
66ed4f9c16

+ 3 - 0
app/common/common.scss

@@ -619,3 +619,6 @@
 .pt0 {
 	padding-top: 0px;
 }
+.org{
+	color: orangered;
+}

+ 4 - 24
app/pages/job/position/manage/part_time.vue

@@ -4,7 +4,7 @@
 			<view class="audits">
 				<view class="audit" :class="{ active: current == index }" v-for="(item, index) in audit" :key="index" @click="click({ index: index }, 'audit')">{{ item.name }}</view>
 			</view>
-			<view class="item" v-for="(item, index) in list" :key="index" @click="detail(item)">
+			<view class="item" v-for="(item, index) in list" :key="index" @click="go('/pages/job/position/manage/part_time_push?id=' + item.id)">
 				<view class="top">
 					<view class="title omit">
 						<text class="icon" :style="{ color: item.state == 0 ? '#4CAF50' : '#545555' }">&#xe614;</text>
@@ -25,12 +25,11 @@
 				</view>
 				<view class="desc">
 					<text class="tag">{{ item.experience }}</text>
-					<text class="tag">{{ item.salary }}</text>
-					<text class="tag">{{ item.regionName }}</text>
+					<text class="tag">费用:{{ item.salary }}¥</text>
+					<text class="tag">{{ item.regionName || '地点不限' }}</text>
 					<text class="date">{{ item.createTime }}</text>
 				</view>
 				<view class="flex">
-					<view class="f br" @click.stop="manageState(item)">{{ item.state == 0 ? '关闭' : '启用' }}</view>
 					<view class="f danger" @click.stop="manageRemove(item)">删除</view>
 				</view>
 			</view>
@@ -97,29 +96,10 @@ export default {
 		go(url) {
 			uni.navigateTo({ url: url });
 		},
-		manageState(item) {
-			uni.showModal({
-				title: '提示',
-				content: item.state == 0 ? '确定关闭该职位' : '确定启用该职位',
-				success: (res) => {
-					if (res.confirm) {
-						this.http.request({
-							url: '/app/position/manage/state',
-							data: { id: item.id, state: item.state == 0 ? 1 : 0 },
-							method: 'POST',
-							success: (res) => {
-								uni.showToast({ title: '操作成功' });
-								item.state = item.state == 0 ? 1 : 0;
-							}
-						});
-					}
-				}
-			});
-		},
 		manageRemove(item) {
 			uni.showModal({
 				title: '提示',
-				content: '确定删除该职位?删除后包括已投递简历也全部清除',
+				content: '确定删除该兼职?删除后金额会退回到你的账户下',
 				success: (res) => {
 					if (res.confirm) {
 						this.http.request({

+ 12 - 0
app/pages/job/position/manage/part_time_push.vue

@@ -141,6 +141,18 @@ export default {
 						});
 						return;
 					}
+					//余额不足,请先充值
+					if (res.data.code == 8080) {
+						uni.showModal({
+							title: '提示',
+							content: res.data.msg,
+							showCancel: false,
+							success: (res) => {
+								uni.navigateTo({ url: '/pages/user/money/index' });
+							}
+						});
+						return;
+					}
 					uni.showToast({ title: '操作成功' });
 					setTimeout(() => {
 						uni.$emit('position');

+ 6 - 3
app/pages/user/money/index.vue

@@ -27,11 +27,13 @@
 				<view class="desc">
 					<text v-if="item.state == 0 && item.type == 0" style="color: #f44336">未支付</text>
 					<text v-if="item.state == 1 && item.type == 0" style="color: #4caf50">充值成功</text>
+					<text v-if="item.state == 1 && item.type == 1" style="color: #4caf50">兼职支出</text>
+					<text v-if="item.state == 1 && item.type == 4" style="color: #4caf50">退款成功</text>
 					<text>{{ item.createTime }}</text>
 				</view>
 				<view class="price">
 					<text v-if="item.type == 0" style="color: orangered">+{{ item.money }}</text>
-					<text v-if="item.type == 1" style="color: orangered">-{{ item.money }}</text>
+					<text v-if="item.type == 1 || item.type == 4" style="color: darkgray">-{{ item.money }}</text>
 				</view>
 			</view>
 			<view class="loading" v-if="loadMore"><u-loadmore :status="loadMore ? 'loading' : 'nomore'" /></view>
@@ -51,10 +53,11 @@ export default {
 				{ name: '充值', value: 0 },
 				{ name: '支出', value: 1 },
 				{ name: '提现', value: 2 },
-				{ name: '收入', value: 3 }
+				{ name: '收入', value: 3 },
+				{ name: '退款', value: 4 }
 			],
 			list: [],
-			param: { pageNum: 1, pageSize: 10, type: 0 },
+			param: { pageNum: 1, pageSize: 10 },
 			loadMore: true
 		};
 	},

+ 3 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Pay.java

@@ -25,6 +25,9 @@ public class Pay{
     @ApiModelProperty(value = "充值人id")
     private Long userId;
 
+    @ApiModelProperty(value = "兼职id")
+    private Long positionId;
+
     @ApiModelProperty(value = "充值编号")
     private String nums;
 

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Position.java

@@ -100,11 +100,11 @@ public class Position extends BaseData {
     @ApiModelProperty(value = "是否推荐:0=否,1=是")
     private Integer recommend;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "开始时间")
     private Date startDate;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "结束时间")
     private Date endDate;
 

+ 5 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/dto/PositionStateDto.java

@@ -17,4 +17,9 @@ public class PositionStateDto {
     @Min(value = 0, message = "参数错误")
     @Max(value = 1, message = "参数错误")
     private Integer state;
+
+    @NotNull(message = "参数错误")
+    @Min(value = 0, message = "参数错误")
+    @Max(value = 1, message = "参数错误")
+    private Integer type;
 }

+ 61 - 14
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/PositionServiceImpl.java

@@ -6,23 +6,19 @@ import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.web.work.api.util.AppUtil;
-import com.ruoyi.web.work.domain.Column;
-import com.ruoyi.web.work.domain.Enterprise;
-import com.ruoyi.web.work.domain.Position;
-import com.ruoyi.web.work.domain.User;
+import com.ruoyi.web.work.domain.*;
 import com.ruoyi.web.work.domain.dto.PositionDto;
 import com.ruoyi.web.work.domain.dto.PositionQueryDto;
 import com.ruoyi.web.work.domain.dto.PositionStateDto;
 import com.ruoyi.web.work.domain.vo.PositionListVo;
 import com.ruoyi.web.work.mapper.PositionMapper;
-import com.ruoyi.web.work.service.IColumnService;
-import com.ruoyi.web.work.service.IEnterpriseService;
-import com.ruoyi.web.work.service.IPositionService;
-import com.ruoyi.web.work.service.IUserService;
+import com.ruoyi.web.work.service.*;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -43,6 +39,9 @@ public class PositionServiceImpl extends ServiceImpl<PositionMapper, Position> i
     @Autowired
     private IUserService userService;
 
+    @Autowired
+    private IPayService payService;
+
     @Override
     public List<Position> selectList(Position position) {
         return positionMapper.selectList(position);
@@ -88,14 +87,15 @@ public class PositionServiceImpl extends ServiceImpl<PositionMapper, Position> i
         return AjaxResult.success(result);
     }
 
+    @Transactional
     @Override
     public AjaxResult manageAdd(PositionDto dto) {
         if (AppUtil.getUser().getIsAuthentication() != 1) {
             return AjaxResult.error(7878, "发布全职或兼职需要实名认证");
         }
-        //如果发布全职需要审核企业信息通过才允许发布
+        User user = userService.getById(AppUtil.getUser().getId());
+        //全职
         if (dto.getType() == 0) {
-            User user=userService.getById(AppUtil.getUser().getId());
             if (user.getType() != 1) {
                 return AjaxResult.error("只有企业用户才能发布全职");
             }
@@ -103,11 +103,12 @@ public class PositionServiceImpl extends ServiceImpl<PositionMapper, Position> i
                 return AjaxResult.error(7979, "请先完成企业认证");
             }
         }
+        //兼职
         if (dto.getType() == 1) {
-            User user=userService.getById(AppUtil.getUser().getId());
-            if(user.getMoney())
+            if (new BigDecimal(dto.getSalary()).compareTo(user.getMoney()) > 0) {
+                return AjaxResult.error(8080, "余额不足请先充值");
+            }
         }
-
         Position position = new Position();
         BeanUtils.copyProperties(dto, position);
         Column region = columnService.selectRegion(new Column().setTitle(position.getRegionName()).setLevel(3));
@@ -125,7 +126,28 @@ public class PositionServiceImpl extends ServiceImpl<PositionMapper, Position> i
         position.setAudit(1);
         position.setRecommend(0);
         if (!save(position)) {
-            throw new ServiceException("发布职位失败");
+            throw new ServiceException("发布职位失败,请联系平台");
+        }
+        //发布兼职更新账户和保存支出记录
+        if (dto.getType() == 1) {
+            //更新用户账户余额
+            user.setMoney(user.getMoney().subtract(new BigDecimal(dto.getSalary())));
+            if (!userService.updateById(user)) {
+                throw new ServiceException("更新账户余额失败,请联系平台");
+            }
+            //添加支出记录
+            Pay pay = new Pay();
+            pay.setUserId(user.getId());
+            pay.setMoney(new BigDecimal(dto.getSalary()));
+            pay.setState(1);
+            pay.setType(1);
+            pay.setTitle(position.getTitle());
+            pay.setVersion(System.currentTimeMillis());
+            pay.setPositionId(position.getId());
+            pay.setNums(StringUtils.generateNumber());
+            if (!payService.save(pay)) {
+                throw new ServiceException("保存支出记录失败,请联系平台");
+            }
         }
         return AjaxResult.success();
     }
@@ -166,6 +188,7 @@ public class PositionServiceImpl extends ServiceImpl<PositionMapper, Position> i
         return AjaxResult.success(position);
     }
 
+    @Transactional
     @Override
     public AjaxResult manageRemove(Long id) {
         Position position = getById(id);
@@ -175,6 +198,27 @@ public class PositionServiceImpl extends ServiceImpl<PositionMapper, Position> i
         if (!removeById(id)) {
             throw new ServiceException("删除职位失败,请联系平台");
         }
+        //删除兼职退回余额
+        if (position.getType() == 1) {
+            User user = userService.getById(position.getUserId());
+            user.setMoney(user.getMoney().add(new BigDecimal(position.getSalary())));
+            if (!userService.updateById(user)) {
+                throw new ServiceException("更新账户余额失败,请联系平台");
+            }
+            //添加退回记录
+            Pay pay = new Pay();
+            pay.setUserId(user.getId());
+            pay.setMoney(new BigDecimal(position.getSalary()));
+            pay.setState(1);
+            pay.setType(4);
+            pay.setTitle(position.getTitle());
+            pay.setVersion(System.currentTimeMillis());
+            pay.setPositionId(position.getId());
+            pay.setNums(StringUtils.generateNumber());
+            if (!payService.save(pay)) {
+                throw new ServiceException("保存退回记录失败,请联系平台");
+            }
+        }
         return AjaxResult.success();
     }
 
@@ -184,6 +228,9 @@ public class PositionServiceImpl extends ServiceImpl<PositionMapper, Position> i
         if (position == null || !position.getUserId().equals(AppUtil.getUser().getId())) {
             return AjaxResult.error("职位不存在或非法操作");
         }
+        if (dto.getType() == 1) {
+            return AjaxResult.error("兼职不允许关闭");
+        }
         position.setState(dto.getState());
         if (!updateById(position)) {
             throw new ServiceException("启用或关闭职位失败,请联系平台");

+ 1 - 0
ruoyi-admin/src/main/resources/mapper/work/PayMapper.xml

@@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="state != null "> and state = #{state}</if>
             <if test="type != null "> and type = #{type}</if>
         </where>
+        order by id desc
     </select>
 
     <select id="selectByNums" resultType="com.ruoyi.web.work.domain.Pay">