Merge remote-tracking branch 'origin/ah-simple-test' into ah-simple-test

This commit is contained in:
itcast 2025-12-01 17:24:06 +08:00
commit ef7e3f9093
8 changed files with 487 additions and 46 deletions

View File

@ -205,6 +205,25 @@ public class DevChangeController extends BaseController {
}
}
/**
* 获取设备详情
*
* @param dto
* @return
*/
@ApiOperation(value = "获取设备详情")
@GetMapping("/getOrderById")
public AjaxResult getOrderById(CsDeviceDetails dto) {
try {
CsDeviceVo devInfo = service.getOrderById(dto);
return AjaxResult.success(devInfo);
} catch (Exception e) {
logger.error("获取设备详情异常:{}", e.getMessage());
return AjaxResult.error("查询失败,请联系管理员");
}
}
/**
* 获取申请一级列表
*
@ -250,6 +269,19 @@ public class DevChangeController extends BaseController {
}
/**
* 审核出库
*
* @param entity
* @return
*/
@ApiOperation(value = "审核出库")
@PostMapping("/orderOut")
public AjaxResult orderOut(@RequestBody CsDeviceDetails entity) {
return service.orderOut(entity);
}
/**
* 审核出库
*
@ -263,6 +295,33 @@ public class DevChangeController extends BaseController {
}
/**
* 审核出库
*
* @param entity
* @return
*/
@ApiOperation(value = "审核出库")
@PostMapping("/orderOutAll")
public AjaxResult orderOutAll(@RequestBody CsDeviceDetails entity) {
return service.orderOutAll(entity);
}
/**
* 审核出库
*
* @param entity
* @return
*/
@ApiOperation(value = "审核出库")
@PostMapping("/orderOutCancel")
public AjaxResult orderOutCancel(@RequestBody CsDeviceDetails entity) {
return service.orderOutCancel(entity);
}
/**
* 审核出库
*
@ -276,6 +335,18 @@ public class DevChangeController extends BaseController {
}
/**
* 审核出库
*
* @param entity
* @return
*/
@ApiOperation(value = "审核出库")
@PostMapping("/orderOutCancelAll")
public AjaxResult orderOutCancelAll(@RequestBody CsDeviceDetails entity) {
return service.orderOutCancelAll(entity);
}
/**
* 审核出库
*
@ -288,6 +359,7 @@ public class DevChangeController extends BaseController {
return service.outCancelAll(entity);
}
@ApiOperation(value = "获取申请一级列表")
@GetMapping("/getOutboundList")
public TableDataInfo getOutboundList(CsDeviceInfo dto) {

View File

@ -272,4 +272,26 @@ public interface DevChangeMapper {
List<CsDeviceDetails> getDevDetailsInfoEquipment(CsDeviceDetails dto);
List<CsDeviceChange> getDevChangeRList(CsDeviceChange vo);
CsDeviceInfo getOrderById(CsDeviceDetails dto);
List<CsDeviceDetails> getOrderDetailsById(CsDeviceDetails dto);
CsDeviceDetails getOrderDetailsMaDevInfo(CsDeviceDetails csDeviceDetails);
CsDeviceDetails getOrderDetailsTypeToolInfo(CsDeviceDetails csDeviceDetails);
void updateOrderZb(CsDeviceDetails entity);
void updateOrderGj(CsDeviceDetails entity);
Integer orderOut(CsDeviceDetails entity);
Integer orderOutAll(CsDeviceDetails entity);
Integer orderOutCancel(CsDeviceDetails entity);
Integer orderOutCancelAll(CsDeviceDetails entity);
List<CsDeviceDetails> getOrderOutAllList(CsDeviceDetails entity);
}

View File

@ -154,4 +154,14 @@ public interface DevChangeService {
AjaxResult outAll(CsDeviceDetails entity);
List<CsDeviceChange> getDevChangeRList(CsDeviceChange csDeviceChange);
CsDeviceVo getOrderById(CsDeviceDetails dto);
AjaxResult orderOut(CsDeviceDetails entity);
AjaxResult orderOutAll(CsDeviceDetails entity);
AjaxResult orderOutCancel(CsDeviceDetails entity);
AjaxResult orderOutCancelAll(CsDeviceDetails entity);
}

View File

@ -556,6 +556,126 @@ public class DevChangeServiceImpl implements DevChangeService {
return new ArrayList<>();
}
/**
* @param dto
* @return
*/
@Override
public CsDeviceVo getOrderById(CsDeviceDetails dto) {
CsDeviceVo csDeviceVo = new CsDeviceVo();
// 根据id查询主任务表数据
CsDeviceInfo devInfo = mapper.getOrderById(dto);
// 根据id查询设备详情表数据
List<CsDeviceDetails> devDetailsList = mapper.getOrderDetailsById(dto);
if (CollectionUtils.isNotEmpty(devDetailsList)) {
// 根据devType去查询装备或工具详情
for (CsDeviceDetails csDeviceDetails : devDetailsList) {
CsDeviceDetails devDetails = new CsDeviceDetails();
if (StringUtils.isNotBlank(csDeviceDetails.getDevType()) && "0".equals(csDeviceDetails.getDevType())) {
if ("/".equals(csDeviceDetails.getDevCode())) {
csDeviceDetails.setDevCode(null);
}
devDetails = mapper.getOrderDetailsMaDevInfo(csDeviceDetails);
} else if (StringUtils.isNotBlank(csDeviceDetails.getDevType()) && "1".equals(csDeviceDetails.getDevType())) {
if ("/".equals(csDeviceDetails.getDevCode())) {
csDeviceDetails.setDevCode(null);
}
devDetails = mapper.getOrderDetailsTypeToolInfo(csDeviceDetails);
}
if (devDetails != null) {
csDeviceDetails.setDevType(StringUtils.isNotBlank(devDetails.getDevType()) ? devDetails.getDevType() : "");
csDeviceDetails.setCategory(StringUtils.isNotBlank(devDetails.getCategory()) ? devDetails.getCategory() : "");
csDeviceDetails.setTypeName(StringUtils.isNotBlank(devDetails.getTypeName()) ? devDetails.getTypeName() : "");
csDeviceDetails.setTypeModelName(StringUtils.isNotBlank(devDetails.getTypeModelName()) ? devDetails.getTypeModelName() : "");
csDeviceDetails.setManageType(StringUtils.isNotBlank(devDetails.getManageType()) ? devDetails.getManageType() : "");
csDeviceDetails.setDevCode(StringUtils.isNotBlank(devDetails.getDevCode()) ? devDetails.getDevCode() : "");
csDeviceDetails.setStorageNum(devDetails.getStorageNum());
// 用于编辑显示数据是否选中前端根据typeId和id结合判断
csDeviceDetails.setId(devDetails.getId());
}
}
}
csDeviceVo.setDevInfo(devInfo);
csDeviceVo.setDevDetailsList(devDetailsList);
return csDeviceVo;
}
/**
* @param entity
* @return
*/
@Override
public AjaxResult orderOut(CsDeviceDetails entity) {
try {
//装备
if (entity.getDevType().equals("1")) {
mapper.updateOrderZb(entity);
} else {
mapper.updateOrderGj(entity);
}
Integer out = mapper.orderOut(entity);
return out > 0 ? AjaxResult.success("出库成功") : AjaxResult.error("出库失败");
} catch (Exception e) {
log.error(e.getMessage());
return AjaxResult.error("出库失败");
}
}
/**
* @param entity
* @return
*/
@Override
public AjaxResult orderOutAll(CsDeviceDetails entity) {
try {
List<CsDeviceDetails> outAllList = mapper.getOrderOutAllList(entity);
Integer out = mapper.orderOutAll(entity);
if (out > 0) {
outAllList.forEach(item -> {
if (item.getDevType().equals("0")) {
mapper.updateOrderZb(item);
} else {
mapper.updateOrderGj(item);
}
});
}
return out > 0 ? AjaxResult.success("出库成功") : AjaxResult.error("出库失败");
} catch (Exception e) {
log.error(e.getMessage());
return AjaxResult.error("出库失败");
}
}
/**
* @param entity
* @return
*/
@Override
public AjaxResult orderOutCancel(CsDeviceDetails entity) {
try {
Integer out = mapper.orderOutCancel(entity);
return out > 0 ? AjaxResult.success("出库成功") : AjaxResult.error("出库失败");
} catch (Exception e) {
log.error(e.getMessage());
return AjaxResult.error("出库失败");
}
}
/**
* @param entity
* @return
*/
@Override
public AjaxResult orderOutCancelAll(CsDeviceDetails entity) {
try {
Integer out = mapper.orderOutCancelAll(entity);
return out > 0 ? AjaxResult.success("出库成功") : AjaxResult.error("出库失败");
} catch (Exception e) {
log.error(e.getMessage());
return AjaxResult.error("出库失败");
}
}
/**
* 获取待出库单子
*
@ -842,12 +962,12 @@ public class DevChangeServiceImpl implements DevChangeService {
public List<DevChangeVo> getDevDetails(CsDeviceChangeDetailsVo vo) {
try {
List<DevChangeVo> list = mapper.getDevDetails(vo);
for(DevChangeVo devChangeVo : list){
if(devChangeVo.getWorkingHours() == null){
for (DevChangeVo devChangeVo : list) {
if (devChangeVo.getWorkingHours() == null) {
devChangeVo.setWorkingHours(0);
}
devChangeVo.setRemainingHours(devChangeVo.getMaxWorkingHours()-devChangeVo.getWorkingHours());
devChangeVo.setRemainingHours(devChangeVo.getMaxWorkingHours() - devChangeVo.getWorkingHours());
}
return list;
} catch (Exception e) {
@ -857,7 +977,7 @@ public class DevChangeServiceImpl implements DevChangeService {
}
@Override
public List<Map<String, Object>> getVoltageLevel(JjProjectVo vo) {
public List<Map<String, Object>> getVoltageLevel(JjProjectVo vo) {
try {
return mapper.getVoltageLevel(vo);
} catch (Exception e) {

View File

@ -200,4 +200,6 @@ public class OrderInfoDto {
@ApiModelProperty(value = "区/县")
private String proCounty;
private String taskStatus;
}

View File

@ -33,11 +33,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
d.brand as brand,
'0' AS devType,
mt.type_name as typeName,
mt.manage_type as manageType,
d.manage_type as manageType,
d.production_date as productionDate,
d.working_hours as workingHours,
d.person as person,
d.person_phone as personPhone,
sd.leader as person,
sd.phone as personPhone,
c.company_name as companyName,
c.company_id as companyId,
c.operate_address as operateAddress,
@ -46,6 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bcd.order_user as orderUser,
bcd.address as address
FROM ma_dev_info d
LEFT JOIN sys_dept sd ON sd.dept_id = d.on_company
LEFT JOIN bm_company_info c ON d.on_company = c.company_id
LEFT JOIN book_car_detail bcd ON d.ma_id = bcd.ma_id
LEFT JOIN ma_type mt ON d.type_id = mt.type_id and mt.del_flag = '0'
@ -65,10 +66,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
tt1.type_name as deviceName,
tl.available_num as deviceCount,
tl.type_id as typeId,
tl.`status` as maStatus,
if(tl.available_num = 0,2,1) as maStatus,
ms.supplier_name as brand,
tt.type_name as typeName,
'1' AS devType,
tt.type_name as typeName,
tl.manage_mode as manageType,
tl.production_date as productionDate,
'' as workingHours,

View File

@ -852,6 +852,122 @@
ORDER BY
cds.create_time DESC
</select>
<select id="getOrderById" resultType="com.bonus.material.devchange.domain.CsDeviceInfo">
select order_id as id,
pro_code as proCode,
pro_name as proName,
pro_type as proType,
voltage_level as voltageLevel,
use_unit as useUnit,
pro_province as proProvince,
pro_city as proCity,
pro_county as proCounty,
use_time as useTime,
code as code,
CASE
-- 已完成:所有子表记录 is_finished = 1
WHEN NOT EXISTS (
SELECT 1
FROM ma_order_details cdc1
WHERE cdc1.order_id = #{id}
AND cdc1.is_finished &lt;&gt; '1' -- 不存在非1的记录
) THEN '3'
-- 待出库:所有子表记录 is_finished = 0
WHEN NOT EXISTS (
SELECT 1
FROM ma_order_details cdc2
WHERE cdc2.order_id = #{id}
AND cdc2.is_finished &lt;&gt; '0' -- 不存在非0的记录
) THEN '1'
-- 其余情况:出库中(包含 is_finished=2 或其他值)
ELSE '2'
END AS taskStatus
from ma_order_info
where order_id = #{id}
</select>
<select id="getOrderDetailsById" resultType="com.bonus.material.devchange.domain.CsDeviceDetails">
SELECT id AS detailsId,
devType AS devType,
ma_id AS typeId,
num AS num,
rent_begin_time AS useStartTime,
IFNULL(real_num, 0) AS realNum,
rent_end_time AS useEndTime,
is_finished AS isFinished
FROM ma_order_details
where order_id = #{id}
</select>
<select id="getOrderDetailsMaDevInfo" resultType="com.bonus.material.devchange.domain.CsDeviceDetails">
SELECT CASE
WHEN mt.level = 1 THEN mt.type_name
WHEN mt.level = 2 THEN CONCAT(mt1.type_name, '>', mt.type_name)
WHEN mt.level = 3 THEN CONCAT(mt2.type_name, '>', mt1.type_name, '>', mt.type_name)
WHEN mt.level = 4 THEN CONCAT(mt3.type_name, '>', mt2.type_name, '>', mt1.type_name, '>',
mt.type_name)
WHEN mt.level = 5 THEN CONCAT(mt4.type_name, '>', mt3.type_name, '>', mt2.type_name, '>',
mt1.type_name, '>', mt.type_name)
WHEN mt.level = 6 THEN CONCAT(mt5.type_name, '>', mt4.type_name, '>', mt3.type_name, '>',
mt2.type_name, '>', mt1.type_name, '>', mt.type_name)
ELSE mt.type_name
END AS category,
mdi.device_name AS typeName,
mdi.item_type_model AS typeModelName,
mdi.manage_type AS manageType,
mdi.code AS devCode,
SUM(CASE WHEN mdi.ma_status = 1 THEN 1 ELSE 0 END) AS storageNum,
1 AS devType,
mdi.type_id AS typeId,
mdi.ma_id AS id
FROM ma_dev_info mdi
LEFT JOIN ma_type mt ON mdi.type_id = mt.type_id
LEFT JOIN ma_type mt1 ON mt.parent_id = mt1.type_id
LEFT JOIN ma_type mt2 ON mt1.parent_id = mt2.type_id
LEFT JOIN ma_type mt3 ON mt2.parent_id = mt3.type_id
LEFT JOIN ma_type mt4 ON mt3.parent_id = mt4.type_id
LEFT JOIN ma_type mt5 ON mt4.parent_id = mt5.type_id
where mdi.is_active = '1'
and mdi.ma_id = #{typeId}
</select>
<select id="getOrderDetailsTypeToolInfo" resultType="com.bonus.material.devchange.domain.CsDeviceDetails">
SELECT CONCAT(tt4.type_name, '>', tt3.type_name, '>', tt2.type_name) as category,
tt1.type_name as typeName,
tt.type_name as typeModelName,
tl.manage_mode as manageType,
IFNULL(tl.tool_code,'/') as devCode,
tl.available_num as storageNum,
2 as devType,
tl.type_id as typeId,
tl.id as id
FROM tool_ledger tl
LEFT JOIN tool_type tt ON tl.type_id = tt.type_id
LEFT JOIN tool_type tt1 ON tt.parent_id = tt1.type_id
LEFT JOIN tool_type tt2 ON tt1.parent_id = tt2.type_id
LEFT JOIN tool_type tt3 ON tt2.parent_id = tt3.type_id
LEFT JOIN tool_type tt4 ON tt3.parent_id = tt4.type_id
where
tl.id = #{typeId}
</select>
<select id="getOrderOutAllList" resultType="com.bonus.material.devchange.domain.CsDeviceDetails">
SELECT COALESCE(
CASE
WHEN cdcd.devType = '0' THEN CONCAT(a.ma_id, '')
WHEN cdcd.devType = '1' THEN CONCAT(b.id, '')
ELSE ''
END, ''
) AS id,
cdcd.devType AS devType,
COALESCE(cdcd.num, 0) - COALESCE(cdcd.real_num, 0) AS outNum
FROM ma_order_details cdcd
LEFT JOIN ma_dev_info a
ON cdcd.devType = '0'
AND cdcd.ma_id = a.ma_id
LEFT JOIN tool_ledger b
ON cdcd.devType = '1'
AND cdcd.ma_id = b.id
WHERE cdcd.order_id = #{id}
</select>
<insert id="addChangeInfoNew" keyProperty="id" useGeneratedKeys="true">
@ -933,7 +1049,7 @@
</set>
where id = #{id}
</update>
<update id="out">
<update id="out">
UPDATE cs_device_change_details
SET is_finished = CASE
WHEN (IFNULL(real_num, 0) + #{outNum}) = num THEN '1'
@ -981,6 +1097,48 @@
change_status = '2'
WHERE ma_id = #{id}
</update>
<update id="updateOrderZb">
UPDATE ma_dev_info
set ma_status = '3',
change_status = '3'
WHERE ma_id = #{id}
</update>
<update id="updateOrderGj">
UPDATE tool_ledger
set available_num = IFNULL(available_num, 0) - #{outNum},
share_num = IFNULL(share_num, 0) + #{outNum},
status ='1'
WHERE id = #{id}
</update>
<update id="orderOut">
UPDATE ma_order_details
SET is_finished = CASE
WHEN (IFNULL(real_num, 0) + #{outNum}) = num THEN '1'
WHEN (IFNULL(real_num, 0) + #{outNum}) &gt; 0 AND
(IFNULL(real_num, 0) + #{outNum}) &lt; num THEN '2'
ELSE '0'
END,
real_num = IFNULL(real_num, 0) + #{outNum}
WHERE id = #{detailsId}
-- 可选:防止超量出库(若业务不允许实际数量超过申请数量,添加此条件)
AND (IFNULL(real_num, 0) + #{outNum}) &lt;= num
</update>
<update id="orderOutAll">
UPDATE ma_order_details
SET is_finished ='1',
real_num = num
WHERE order_id = #{id}
</update>
<update id="orderOutCancel">
UPDATE ma_order_details
SET is_finished ='1'
WHERE id = #{detailsId}
</update>
<update id="orderOutCancelAll">
UPDATE ma_order_details
SET is_finished ='1'
WHERE order_id = #{id}
</update>
<delete id="deleteChangeDetails">
update cs_device_change_details set del_flag = '1' where change_id = #{id}

View File

@ -157,7 +157,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sd.dept_name as sellerName,
moi.address,
moi.order_id,
dept.dept_name as companyName
dept.dept_name as companyName,
CASE
-- 已完成:所有子表记录 is_finished = 1
WHEN NOT EXISTS (
SELECT 1
FROM ma_order_details cdc1
WHERE cdc1.order_id = moi.order_id
AND cdc1.is_finished &lt;&gt; '1' -- 不存在非1的记录
) THEN '3'
-- 待出库:所有子表记录 is_finished = 0
WHEN NOT EXISTS (
SELECT 1
FROM ma_order_details cdc2
WHERE cdc2.order_id = moi.order_id
AND cdc2.is_finished &lt;&gt; '0' -- 不存在非0的记录
) THEN '1'
-- 其余情况:出库中(包含 is_finished=2 或其他值)
ELSE '2'
END AS taskStatus
FROM
ma_order_details hh
LEFT JOIN ma_order_info moi ON moi.order_id = hh.order_id
@ -209,41 +227,79 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectOrderDetailsById" resultType="com.bonus.material.order.domain.OrderDetailDto">
SELECT
mdi.device_name,
mdi.code,
mdi.identify_code,
hh.order_status,
hh.days,
bfi.url,
hh.id,
hh.ma_id,
hh.num,
hh.costs,
hh.rent_begin_time,
hh.rent_end_time,
hh.pre_outbound_user,
hh.pre_outbound_time,
hh.take_over_user,
hh.take_over_time,
hh.rent_over_user,
hh.rent_over_time,
hh.change_cost as changeCost,
hh.relief_cost as reliefCost,
hh.relief_change_cost as reliefChangeCost,
CASE
WHEN DATE(hh.rent_over_time) = DATE(hh.pre_outbound_time) THEN 1
ELSE TIMESTAMPDIFF(DAY, hh.pre_outbound_time, hh.rent_over_time) + 1
END AS dateDays
FROM
ma_order_details hh
LEFT JOIN ma_order_info moi ON hh.order_id = moi.order_id
LEFT JOIN ma_dev_info mdi ON hh.ma_id = mdi.ma_id
LEFT JOIN bm_file_info bfi ON hh.ma_id = bfi.model_id and bfi.task_type = 17 and bfi.file_type = 0
left join ma_type mt ON mdi.type_id = mt.type_id
AND bfi.file_type = 0
WHERE
hh.id = #{id} limit 1
(SELECT mdi.device_name,
mdi.code,
mdi.identify_code,
hh.order_status,
hh.days,
bfi.url,
hh.id,
hh.ma_id,
hh.devType,
hh.num,
hh.costs,
hh.rent_begin_time,
hh.rent_end_time,
hh.pre_outbound_user,
hh.pre_outbound_time,
hh.take_over_user,
hh.take_over_time,
hh.rent_over_user,
hh.rent_over_time,
hh.change_cost as changeCost,
hh.relief_cost as reliefCost,
hh.relief_change_cost as reliefChangeCost,
CASE
WHEN DATE(hh.rent_over_time) = DATE(hh.pre_outbound_time) THEN 1
ELSE TIMESTAMPDIFF(DAY, hh.pre_outbound_time, hh.rent_over_time) + 1
END AS dateDays
FROM ma_order_details hh
LEFT JOIN ma_order_info moi ON hh.order_id = moi.order_id
LEFT JOIN ma_dev_info mdi ON hh.ma_id = mdi.ma_id
LEFT JOIN bm_file_info bfi ON hh.ma_id = bfi.model_id and bfi.task_type = 17 and bfi.file_type = 0
left join ma_type mt ON mdi.type_id = mt.type_id
AND bfi.file_type = 0
WHERE hh.id = #{id}
and hh.devType = '0'
limit 1)
UNION ALL
(SELECT tt1.type_name AS device_name,
mdi.tool_code AS code,
mdi.identify_code,
hh.order_status,
hh.days,
CASE
WHEN mdi.fileList IS NOT NULL AND mdi.fileList != '' THEN SUBSTRING_INDEX(mdi.fileList, ',', 1)
ELSE NULL
END AS url,
hh.id,
hh.ma_id,
hh.devType,
hh.num,
hh.costs,
hh.rent_begin_time,
hh.rent_end_time,
hh.pre_outbound_user,
hh.pre_outbound_time,
hh.take_over_user,
hh.take_over_time,
hh.rent_over_user,
hh.rent_over_time,
hh.change_cost as changeCost,
hh.relief_cost as reliefCost,
hh.relief_change_cost as reliefChangeCost,
CASE
WHEN DATE(hh.rent_over_time) = DATE(hh.pre_outbound_time) THEN 1
ELSE TIMESTAMPDIFF(DAY, hh.pre_outbound_time, hh.rent_over_time) + 1
END AS dateDays
FROM ma_order_details hh
LEFT JOIN ma_order_info moi ON hh.order_id = moi.order_id
LEFT JOIN tool_ledger mdi ON hh.ma_id = mdi.id
LEFT JOIN tool_type tt ON mdi.type_id = tt.type_id
LEFT JOIN tool_type tt1 ON tt.parent_id = tt1.type_id
WHERE hh.id = #{id}
and hh.devType = '1'
limit 1)
</select>
<select id="getOrderDetailsById" resultType="com.bonus.material.order.domain.OrderInfoDto">